【问题标题】:Solidity decimal valuesSolidity 十进制值
【发布时间】:2022-01-20 14:22:22
【问题描述】:

我需要设置一个用户可以支付的最小值,这个值必须是例如 0.5 BNB。 但我不知道我该怎么做。

    uint comissionFee = 5; // 5 will represent 0,5
    uint256 minimunPay = comissionFee*100/1000;

但返回 0

  pragma solidity ^0.8.4;

  function payFees() public payable {
    require(msg.value >= 0.5); // <-- not compatible with uint256
    (bool success,) = owner.call{value: msg.value}("");
    require(success, "Failed to send money");
  }

【问题讨论】:

标签: solidity smartcontracts


【解决方案1】:

首先,solidity 语言中没有双数。

所有的计算都是用整数完成的。为了解决这个问题,以太坊/币安链上的所有代币都将某个大的十进制数作为 double 和 ceil 部分的阈值。

在 ERC20 代币中,这个数字是根据合约的十进制字段计算得出的:10^decimal

对于原生代币 ETH/BNB,有一个固定的小数点,等于 18。 您的代码可以这样修复:

pragma solidity ^0.8.4;

  function payFees() public payable {
    require(msg.value >= 0.5 ether);
    (bool success,) = owner.call{value: msg.value}("");
    require(success, "Failed to send money");
  }

pragma solidity ^0.8.4;

  function payFees() public payable {
    require(msg.value >= 5 * 10**17);
    (bool success,) = owner.call{value: msg.value}("");
    require(success, "Failed to send money");
  }

【讨论】:

    【解决方案2】:

    在 solidity 中,msg.value 不表示为 Ether,但作为 Wei 是较小面额的 ether,您可以将其视为 18 位小数的 ether。例子: 1 个以太币是1000000000000000000 Wei。请注意,据我所知,这适用于大多数链 BSC 也是基于 18 位十进制系统,因此 0.5BNB 将是 500000000000000000 Wei 这样您就可以像这样检查十进制值:

    pragma solidity ^0.8.4;
    
      function payFees() public payable {
        require(msg.value >= 500000000000000000);
        (bool success,) = owner.call{value: msg.value}("");
        require(success, "Failed to send money");
      }
    

    或者:

    pragma solidity ^0.8.4;
    
      function payFees() public payable {
        require(msg.value >= 0.5 ether);
        (bool success,) = owner.call{value: msg.value}("");
        require(success, "Failed to send money");
      }
    

    您还可以查看 this 以更好地演示其工作原理。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2022-08-09
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 2014-02-05
      • 1970-01-01
      相关资源
      最近更新 更多