Solidity 单位

货币单位(Ether Units)

一个字面量的数字,可以使用后缀wei,finney,szabo或ether来在不同面额中转换。不含任何后缀的默认单位是wei。如2 ether == 2000 finney的结果是true。

pragma solidity ^0.4.0;
contract EthUnit{
    uint a;
  
    function f() returns (bool){
    if (2 ether == 2000 finney){
        return true;
    }
  
    return false;
    }
}

时间单位(Time Units)

seconds,minutes,hours,days,weeks,years均可做为后缀,并进行相互转换,默认是seconds为单位。

默认规则如下:

1 == 1 seconds
1 minutes == 60 seconds
1 hours == 60 minutes
1 days == 24 hours
1 weeks = 7 days
1 years = 365 days

如果你需要进行使用这些单位进行日期计算,需要特别小心,因为不是每年都是365天,且并不是每天都有24小时,因为还有闰秒。由于无法预测闰秒,必须由外部的Oracle来更新从而得到一个精确的日历库(内部实现一个日期库也是消耗gas的)。

后缀不能用于变量。如果你想对输入的变量说明其不同的单位,可以使用下面的方式。

pragma solidity ^0.4.0;
contract DeleteExample{
  
    function nowInSeconds() returns (uint256){
        return now;
    }
  
    function f(uint start, uint daysAfter) {
        if (now >= start + daysAfter * 1 days) { 
      
        }
    }
}