входной аргумент в ремиксе значения sub 1

Как ввести/отформатировать значение, например 0,2, в браузере ремиксов в процентах?

напримерfunction transfer(address _to, uint256 _value, uint256 percentage) public returns (bool);

(не обращайте внимания на функцию, это для демонстрационных целей)

Ответы (2)

uint256является целочисленным типом, поэтому вы можете передавать только целые числа. В Solidity нет чисел с плавающей или фиксированной точкой.

Типичным обходным решением является использование рационального числа, то есть числителя и знаменателя, часто с фиксированным знаменателем. Например, при передаче процента вместо передачи 0,2 передайте 20 и разделите на 100:

amount * percentage / 100
Довольно круто, что они экспериментируют с поддержкой этого в будущем :) числа с фиксированной точкой! также я попытался с вашим предложением передать 20 и разделить на 100, однако оно округляется до 0, поэтому я думаю, что это пока не работает :)
Да, это работает. Перед делением убедитесь, что вы умножаете. 5 / 100 * 20 == 0, но 5 * 20 / 100 = 1. Если это не так, поделитесь кодом.
дело в том, что в расчете нет «суммы», я просто хочу показать процент, который равен, например, 0,2. поэтому, если аргумент для параметра _percentage = 20, и я хочу, чтобы 0,2 отображалось в процентах, я пробую _percentage.div(100); что дает 0. Я пробовал с uint256(10).mul(_percentage).div(100); и установите _percentage на 2 на этот раз, и он по-прежнему дает 0.
Что вы подразумеваете под "показать"? Показывая, что что-то произойдет на стороне клиента, где обычно поддерживаются десятичные числа. Для расчета в рамках смарт-контракта вам нужно сохранить его равным 20, пока не придет время сделать с ним расчет.

Вы можете сделать что-то вроде этого:

pragma solidity ^0.4.20;

import "./SafeMath.sol";

contract Percentage{

    uint public testvalue;

    ///apply a percentage as modifying factor to the token amount to transfer
    constructor(uint256 _value, uint256 percentage) public {

        // reduce the amount to transfer by 20 Percent
       uint transferAmount = (_value * SafeMath.sub(100, percentage)) / 100;

       //set testresult
       testvalue = transferAmount;
    }   
}
Я не спрашиваю, как выполнять процентные вычисления в коде, я спрашиваю, как форматировать ввод для поля ввода ремикса при вставке значения sub 1 в качестве аргумента для параметра функции. например, для передаточной функции указано «0xca35b7d915458ef540ade6068dfe2f44e8fa733c», 5, но для подчиненных 1 значений, таких как 0,2 вместо 5
Вам нужно ввести его в виде строки и проанализировать количество начальных нулей и последние числа.