按可变数量向下舍入值

Rounding down a value by a variable amount

所以,我正在编写一个加密货币交易机器人。我可以计算出我可以用我拥有的 BTC 购买多少 ETH,但你只能以增量价值购买 ETH。增量范围从 1000 到 0.001,具体取决于硬币。

问题是,如果增量为 0.001,我如何将 123.456789 舍入为 123.456,如果增量为 10,我如何舍入为 120。

编辑-建议的另一个问题是使用固定数量的 DP,而这是可变的。

假设增量值是十的幂,正或负,算法如下:

  • 将值除以增量
  • 截断结果的小数部分
  • 将截断值乘以增量

乘以 10 的次方 "shifts" 小数点的位置乘以等于您乘以的次方的位数。这样做会将您要截断的部分定位在小数点后。

public static decimal RoundDown(decimal val, decimal pos) {
    return pos * Math.Truncate(val / pos);
}

请注意,此方法适用于高于和低于 1 的增量。当增量为 10 时,除法产生 12.3456789,截断产生 12,然后相乘产生所需的值 120。

Demo.

您可以使用地板:

double val = (double)Math.Floor(originalValue / increment) * increment;

正在使用

Math.Floor(原始值/增量)

给出你可以花费的“加密单位”的数量,然后你乘以增量得到总数“加密单位".