C# 如何在第三个小数点后删除小数点

C# 如何在第三个小数点后删除小数点,c#,C#,我有一个基于双精度而不是十进制的UI控件 当它应该返回值0.001时,它返回值0.00100000004749745 如何将其转换为正确值为0.001的十进制数 请注意,我并没有试图将其格式化为字符串,只是获取正确的值。只需使用 只用 试试这个 double d= yourNum; String s=d.ToString("0.00"); 试试这个 double d= yourNum; String s=d.ToString("0.00"); 您遇到了这样一个事实:0.1不能准确地存储在双精

我有一个基于双精度而不是十进制的UI控件

当它应该返回值0.001时,它返回值0.00100000004749745

如何将其转换为正确值为0.001的十进制数

请注意,我并没有试图将其格式化为字符串,只是获取正确的值。

只需使用

只用

试试这个

double d= yourNum;
String s=d.ToString("0.00");
试试这个

double d= yourNum;
String s=d.ToString("0.00");

您遇到了这样一个事实:
0.1
不能准确地存储在
双精度

如果您只想以3位小数显示结果,而不担心浮点错误,请使用:

string s = dec.ToString("0.000");

您遇到了这样一个事实:
0.1
不能准确地存储在
双精度

如果您只想以3位小数显示结果,而不担心浮点错误,请使用:

string s = dec.ToString("0.000");

您可以使用字符串格式在此处找到已回答的类似问题:

这是一种解决问题的简单方法,使用:

decimalVar.ToString ("#.###");
出于更复杂的目的,如果您希望继续使用十进制值,可以使用此选项:

decimal.Round(yourValue, 3, MidpointRounding.AwayFromZero);

您可以使用字符串格式在此处找到已回答的类似问题:

这是一种解决问题的简单方法,使用:

decimalVar.ToString ("#.###");
出于更复杂的目的,如果您希望继续使用十进制值,可以使用此选项:

decimal.Round(yourValue, 3, MidpointRounding.AwayFromZero);

最好的办法是在您关心精度时开始使用十进制。十的幂在基数2中没有简单的表示。所有的转换和舍入都会在某一点上导致错误。我同意,但是控件是基于双精度的,我不能重写控件。因此,在实际使用之前,我会先对数字进行转换。你最好的选择是在你关心精度的时候开始使用十进制。十的幂在基数2中没有简单的表示。所有的转换和舍入都会在某一点上导致错误。我同意,但是控件是基于双精度的,我不能重写控件。因此,在实际使用之前,我正在转换数字。我认为您需要将ToString添加到其中,以便只显示3个dps。我认为您需要将ToString添加到其中,以便只显示3个dps
“0.000”
然后:)并将其转换回
双精度
。这是非常低效的。在这个问题上,他不是在要求四舍五入,他想把数字改到小数点后两位。
“0.000”
,然后:)再转换回
双精度。这是非常低效的。问题是,他不是要求四舍五入,而是希望数字能达到小数点后两位。