C# 如何在c中从双精度值中修剪十进制#

C# 如何在c中从双精度值中修剪十进制#,c#,double,rounding,C#,Double,Rounding,我正在尝试从c#中的1719.4703776041661双精度值中删除最后一个数字。我希望只有12位数字的双精度值。我怎样才能做到这一点 尝试了以下操作,但仍然获得与输入相同的值(13位) 您正面临精度问题。选中此项: double d = 1719.4703776041849; 放置一个断点并检查存储在d中的值,您会惊讶地发现它不匹配。这是因为该数字比double提供的精度更高 如果需要这样的精度,则必须使用十进制而不是双精度。这将有助于: decimal d = 1719.47037760

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

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


您正面临精度问题。选中此项:

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

如果需要这样的精度,则必须使用
十进制
而不是
双精度
。这将有助于:

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

这可能是X/Y问题。在基数2中有很多值是不能用双精度表示的,它们只是不能进行数学运算。
Round(1719.4703776041661,12)
对我有效一个heck可以工作,更改为string,然后修剪最后的字符,再转换为double@PrasadTelkikar您能试用.NET4.7.2编译器吗@VenkyDhana它比你想象的更糟糕,请阅读我的第一条评论。实际上,它不是关于精度,而是关于“十进制精度”。十进制类型将解析它。但像1/3这样的其他数字仍然无法存储。
decimal d = 1719.4703776041661M; //Need the M suffix to denote a decimal value.
var z = Math.Round(d, 12); //It returns 1719.470377604166