argumento de entrada en remix de un valor sub 1

¿Cómo ingresar/formatear un valor como 0.2 en el navegador de remezclas como porcentaje?

p.ejfunction transfer(address _to, uint256 _value, uint256 percentage) public returns (bool);

(no importa la función es para fines demostrativos)

Respuestas (2)

uint256es un tipo de número entero, por lo que solo puede pasar números enteros. Solidity no tiene números de punto flotante o de punto fijo.

Una solución típica es utilizar un número racional, es decir, un numerador y un denominador, a menudo con un denominador fijo. Por ejemplo, al pasar un porcentaje, en vez de pasar 0,2, pasar 20 y dividir por 100:

amount * percentage / 100
Es genial que estén experimentando con soporte para esto en el futuro :) ¡números de punto fijo! También probé con tu sugerencia de pasar 20 y dividir por 100, sin embargo, se redondea a 0, así que supongo que no funciona por ahora :)
Sí, funciona. Asegúrate de multiplicar antes de dividir. 5/100 * 20 == 0, pero 5 * 20/100 = 1. Si no es así, comparte tu código.
la cosa es que no hay parte de 'cantidad' del cálculo, sólo quiero un porcentaje para mostrar que es, por ejemplo, 0,2. entonces, si el argumento para el parámetro _percentage = 20 y quiero que se muestre 0.2 como porcentaje, pruebo _percentage.div(100); lo que da 0. Probé con uint256(10).mul(_percentage).div(100); y establezca _percentage en 2 esta vez y todavía da 0.
¿Qué quieres decir con "mostrar"? Mostrar algo sucedería en el lado del cliente, donde normalmente se admiten decimales. Para el cálculo dentro del contrato inteligente, debe mantenerlo en 20 hasta que sea el momento de hacer un cálculo con él.

Puedes hacer algo como esto:

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;
    }   
}
No estoy preguntando cómo hacer cálculos de porcentaje en el código, estoy preguntando cómo formatear la entrada para el campo de entrada de remezcla al insertar un valor sub 1 como argumento para un parámetro de función. por ejemplo, para la función de transferencia especificada "0xca35b7d915458ef540ade6068dfe2f44e8fa733c", 5 pero para valores sub 1 como 0.2 en lugar de 5
Debe ponerlo como una cadena y analizar la cantidad de ceros a la izquierda y los últimos números.