固体小数值
Solidity decimal values
我需要设置用户可以支付的最低价值,这个价值必须是例如 0.5 BNB。
但是我不知道我该怎么做。
uint comissionFee = 5; // 5 will represent 0,5
uint256 minimunPay = comissionFee*100/1000;
但是return0
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 中 msg.value
不表示为以太币,而是表示为 Wei,一种较小的以太币面额,您可以将其视为带 18 位小数的以太币。例子:
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 以更好地演示其工作原理。
首先,solidity lang中没有双数。
所有计算均使用整数。为了解决这个问题,Ethereum/Binance Chain 上的所有代币都将一些大的十进制数作为 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");
}
我需要设置用户可以支付的最低价值,这个价值必须是例如 0.5 BNB。 但是我不知道我该怎么做。
uint comissionFee = 5; // 5 will represent 0,5
uint256 minimunPay = comissionFee*100/1000;
但是return0
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 中 msg.value
不表示为以太币,而是表示为 Wei,一种较小的以太币面额,您可以将其视为带 18 位小数的以太币。例子:
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 以更好地演示其工作原理。
首先,solidity lang中没有双数。
所有计算均使用整数。为了解决这个问题,Ethereum/Binance Chain 上的所有代币都将一些大的十进制数作为 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");
}