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

时间:2013-05-09 13:36:27

标签: c# double string.format double-precision

我有double值:

var value = 52.30298270000003

当我将其转换为string时,会失去精度

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

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

2 个答案:

答案 0 :(得分:6)

您想使用R格式说明符

来自MSDN

  

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

     

支持者:Single,Double和BigInteger。

     

精确说明符:忽略。

     

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

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

会给你

52.30298270000003 some text...

答案 1 :(得分:3)

试试这个:

var value = 52.30298270000003;

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

关于单身和双打的ToString方法并使用ToString("R"),MSDN documnetation有以下说法:

  

默认情况下,返回值仅包含7位精度   虽然内部最多保留9位数字。如果值   此实例的大小超过7位,ToString(String)返回   PositiveInfinitySymbol或NegativeInfinitySymbol而不是   预期数量。如果需要更高的精度,请指定格式   “G9”格式规范,总是返回9位数   精度,或“R”,如果数字可以返回7位数   以精度表示,如果数字只能是9位数   用最大精度表示。