23

我刚刚遇到了一个美妙的“功能”,如果有足够的小数位,.NET默认会使用科学记数法。Double.ToString()

.005.ToString() // ".005"
.00005.ToString() // "5E-05" 

有谁知道一种有效的方法来让它以标准(非科学)符号的形式出现?

我已经看到了这个问题,但是前两个答案对我来说似乎有点 hacky,因为他们都这样做Double.ToString(),然后只是重新格式化结果。

谢谢你的帮助。

编辑:

所需的输出:

.00005.ToString() == ".00005"

编辑2:

所有重复的和接近的投票是怎么回事?我在问题中特别说,类似的问题没有令人满意的答案。这个网站上的人们太高兴了。

我的解决方案:

如果它对任何人有用:

/// <summary>
/// Converts the double to a standard notation string.
/// </summary>
/// <param name="d">The double to convert.</param>
/// <returns>The double as a standard notation string.</returns>
public static String ToStandardNotationString(this double d)
{
    //Keeps precision of double up to is maximum
    return d.ToString(".#####################################################################################################################################################################################################################################################################################################################################");

}

注意:这仅适用于大于 1 的值。我还没有找到一种有效的方法来为所有值执行此操作。

4

1 回答 1

16

请参阅标准自定义数字格式字符串。我想你正在寻找".################"

.00005.ToString(".################") // returns ".00005"

是的,这有点骇人听闻,但是只要小数点后的位数不超过那么多,它就可以工作。如果你这样做了,你可能想使用 a在你的字符串StringBuilder中构建大约 330 s(大约是 E-324)。#double.Epsilon

于 2013-02-19T18:30:31.170 回答