如何从 C# 中的双精度值 trim 十进制

How to trim decimal from double value in c#

我正在尝试从 c# 中的 1719.4703776041661 双精度值中删除最后一位。我想只有 12 位数的双精度值。我怎样才能做到这一点?

尝试了以下操作,但仍然得到与输入相同的值(13 位数字)。

Math.Round(1719.4703776041661, 12) // Same Result with 13 digits
double.parse(value.ToString("N12"))

您遇到了精度问题。检查这个:

double d = 1719.4703776041849;

放置一个断点并检查存储在d中的值,你会惊讶它不匹配。这是因为该数字需要比 double 提供的精度更高的精度。

如果您需要这样的精度,那么您必须使用 decimal 而不是 double。这将起作用:

decimal d = 1719.4703776041661M; //Need the M suffix to denote a decimal value.
var z = Math.Round(d, 12); //It returns 1719.470377604166