Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中将双精度字符正确格式化为字符串?_C#_String_Formatting_Double - Fatal编程技术网

在C#中将双精度字符正确格式化为字符串?

在C#中将双精度字符正确格式化为字符串?,c#,string,formatting,double,C#,String,Formatting,Double,我想使用ToString()打印double的字符串表示,而不会丢失精度。当我尝试将其格式化为字符串时,会得到以下结果: double i = 101535479557522.5; i.ToString(); //displays 101535479557523 如何在C#中实现这一点?如果您希望它完全相同,则应使用I.ToString(“r”)(r表示往返)。您可以阅读有关不同的信息。您已接近双精度的极限。发件人: 请记住,浮点数只能近似于十进制数,而浮点数的精度决定了该数字近似于十进制数

我想使用
ToString()
打印double的字符串表示,而不会丢失精度。当我尝试将其格式化为字符串时,会得到以下结果:

double i = 101535479557522.5; 
i.ToString(); //displays 101535479557523

如何在C#中实现这一点?

如果您希望它完全相同,则应使用
I.ToString(“r”)
(r表示往返)。您可以阅读有关不同的信息。

您已接近双精度的极限。发件人:

请记住,浮点数只能近似于十进制数,而浮点数的精度决定了该数字近似于十进制数的精度。默认情况下,双精度值包含15位小数精度,但内部最多保留17位


如果您想要更高的精度,特别是保持十进制表示,您应该考虑改用
decimal
类型。

在我再次添加更多数字后,它忽略了.5!!再次失败如果我们加上338451598252507.5倍,结果将是169225799262538而不是169225799262537.5,我认为这是很大的problem@salamonti:这个答案解释了为什么你看到了你看到的结果。所有的编程语言都有这个“问题”-这是一个不幸的现实限制,在64位值内只能有这么多精度。@salamonti:基本上正是Timwi所说的。有关更多信息,请参阅。