string.format(format,doubleValue),精度丢失

本文关键字:format 精度 doubleValue string | 更新日期: 2023-09-27 18:12:45

我有这个double值:

var value = 52.30298270000003

,当我把它转换成string时,它失去了它的精度:

var str = string.Format("{0} some text...", value);
Console.WriteLine(str); // output: 52.3029827

我的double值的精度的数目可以在运行时更改。如何强制string.Format方法使用所有精度?

string.format(format,doubleValue),精度丢失

您想使用R格式说明符

来自MSDN

结果:一个可以往返到相同数字的字符串。

支持:Single, Double, BigInteger

精度说明符:忽略。

更多信息:The Round-trip ("R") Format Specifier.

String.Format("{0:R} some text...", value)

会给你

52.30298270000003 some text...

试试这个:

var value = 52.30298270000003;
var str = string.Format("{0} some text...", value.ToString("R"));
Console.WriteLine(str); // output: 52.3029827

MSDN文档对单打和双打的ToString方法和使用ToString("R")有以下说明:

默认情况下,返回值只包含7位精度虽然内部保持最多9位。如果值的值大于7位,ToString(String)返回PositiveInfinitySymbol或NegativeInfinitySymbol代替预期的数量。如果需要更高的精度,请使用"G9"格式规范,它总是返回9位的精度,或"R",如果数字可以,则返回7位数字如果数字只能是,则用该精度或9位数字表示以最高精度表示。