Double ToString - 没有科学记数法

时间:2013-02-19 18:26:46

标签: c# .net double tostring

如果有足够的小数位,我刚刚遇到了一个非常棒的“功能”,即.NET默认情况下 使用科学记数法做Double.ToString()

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

有没有人知道一种有效的方式让它以标准(非科学)符号显示为字符串?

我见过this question,但前两个答案对我来说似乎有些苛刻,因为他们都Double.ToString()然后重新格式化结果。

感谢您的帮助。

编辑:

所需的输出:

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

EDIT2:

所有重复和结束投票是什么?我在问题中特别说 ,类似的问题没有令人满意的答案。这个网站上的人们太开心了。

我的解决方案:

如果它对任何人都有用:

/// <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(".#####################################################################################################################################################################################################################################################################################################################################");

}

注意:这仅适用于值&gt; 1.我还没有找到一种有效的方法来为所有值做这件事。

1 个答案:

答案 0 :(得分:14)

请参阅StandardCustom Numeric Format Strings。我想你正在寻找".################"

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

这有些神圣,是的,但只要你没有超过十进制之后的那么多地方就可以了。如果您这样做,您可能希望使用StringBuilder在字符串中构建约330 #个(double.Epsilon的顺序为E-324)。