Math

四捨五入定點整數

  • May 12, 2021

如果我使用定點算法來表示速率,例如,射線中的 2%(十進制精度 27)將是102000000000000000000000000000.

如果我有一個像101333333333333333333333333333(1.33%) 這樣的比率,我怎樣才能將它四捨五入到最接近的 0.25%?

我希望10125000000000000000000000000(1.25%) 成為結果。

它們是整數,因此您可以像整數一樣將它們四捨五入。

要將整數 A 舍入到 B,請按照以下 trunc(A / B) * B 進行。

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.0 <0.9.0;


contract Test  {

   uint256 public one = 10**27;
   uint256 public two_percent = 10**27 + 0.02 * 10**27;
   uint256 public rate = 10**27 + 0.01 * 10**27 + uint256(0.01 * 10**27) / 3;
   
   uint256 public round = 0.0025 * 10**27;
   
   function roundDown() public view returns (uint256) {
       return ((rate / round) * round);
   }

   function roundUp() public view returns (uint256) {
       return (((rate + round - 1) / round) * round);
   }
}

引用自:https://ethereum.stackexchange.com/questions/96610