【问题标题】:How to convert double to string without the power to 10 representation (E-05)如何在没有 10 表示的情况下将 double 转换为字符串 (E-05)
【发布时间】:2010-11-22 02:18:02
【问题描述】:

如何在没有幂到 10 表示的情况下将 double 转换为字符串 (E-05)

double value = 0.000099999999833333343;
string text = value.ToString();
Console.WriteLine(text); // 9,99999998333333E-05

我希望字符串 text 为 0.000099999999833333343(或者差不多,我不是在做火箭科学:)

我尝试了以下变体

Console.WriteLine(value.ToString());      // 9,99999998333333E-05
Console.WriteLine(value.ToString("R20")); // 9,9999999833333343E-05
Console.WriteLine(value.ToString("N20")); // 0,00009999999983333330
Console.WriteLine(String.Format("{0:F20}", value)); // 0,00009999999983333330   

tostring N20 或 format F20 似乎最接近我想要的,但我最终会得到很多尾随零,有没有聪明的方法来避免这种情况?我想尽可能接近双重表示 0.000099999999833333343

【问题讨论】:

    标签: c# tostring


    【解决方案1】:

    String.Format()format specifier 一起使用。我想你想要 {0:F20} 左右。

    string formatted = String.Format("{0:F20}", value);
    

    【讨论】:

      【解决方案2】:

      怎么样

      Convert.ToDecimal(doubleValue).ToString()
      

      【讨论】:

      • 这是一个聪明的想法,但是float (e 3.402823e38) 的范围大于decimal (79,228,162,514,264,337,593,543,950,335) 的范围。因此较大的值会导致异常。
      【解决方案3】:

      您不需要string.Format()。只需将正确的format string 放在现有的.ToString() 方法中即可。像“N”这样的东西应该可以。

      【讨论】:

      • string.Format with 'N' 将添加逗号,它不会只使用整数来形成字符串。示例:34634859436785434 将显示为“34,634,859,436,785,400.00”
      【解决方案4】:

      string.Format 与适当的格式说明符一起使用。

      这篇博文有很多例子:http://blogs.msdn.com/kathykam/archive/2006/03/29/564426.aspx

      【讨论】:

      • 投反对票时,请发表评论。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多