使用 Math.Round 舍入双精度值

jde*_*noh 0 .net c#

我有一个双精度值:0.314285,我想将其四舍五入到小数点后 5 位。从数学的角度来看,我的预期结果是:0.31429。在我的代码中,我使用带有MidPointRounding.AwayFromZero参数重载的 Math.Round ,结果输出为:0.31428。

有没有另一种方法来实现输出结果为:0.31429??

Pav*_*ski 5

您应该阅读舍入和精度文章。您的数字在内存中的真实表示可能类似于0.3142849999999999,因此您会得到0.31428结果。使用decimal类型可以帮助解决这个问题

var value = 0.314285m;
var result = Math.Round(value, 5, MidpointRounding.AwayFromZero); //0.31429
Run Code Online (Sandbox Code Playgroud)