运行此计算会添加一个额外的小数点

use*_*931 1 c# math rounding

我正在运行以下计算,由于某种原因,结果中添加了一个额外的小数:

decimal bal = 10.0000
decimal totAmount = 15.0000
decimal payAmount = 3

tempAmount = Math.Ceiling((decimal)(bal / totAmount) * payAmount * 100);
tempAmount = tempAmount / 100;

// tempAmount results in 2.01 as opposed to 2.00
Run Code Online (Sandbox Code Playgroud)

我运行这个错误吗?

Jon*_*eet 7

我运行这个错误吗?

不,但是您引入了一个中间值 (10m/15m),该值无法精确表示为decimal. 它被四舍五入到 0.6666666666666666666666666667,这就会导致问题。

如果将除法作为最后一个操作执行,则可以避免这种情况,至少在这种情况下:

using System;

decimal bal = 10.0000m;
decimal totAmount = 15.0000m;
decimal payAmount = 3;

decimal tempAmount = Math.Ceiling((bal * payAmount * 100m) / totAmount);
tempAmount = tempAmount / 100;

Console.WriteLine(tempAmount);
Run Code Online (Sandbox Code Playgroud)

打印出 2 而不是 2.01。