Double ToString - 没有科学记数法

MgS*_*Sam 20 .net c# double tostring

我刚刚遇到了一个很棒的"功能",如果有足够的小数位,.NET 默认Double.ToString()使用科学记数法.

.005.ToString() // ".005"
.00005.ToString() // "5E-05" 
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助.

编辑:

所需的输出:

.00005.ToString() == ".00005"
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)

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

Tim*_* S. 14

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

.00005.ToString(".################") // returns ".00005"
Run Code Online (Sandbox Code Playgroud)

它有点hackish,是的,但只要你没有超过十进制之后的那么多地方就可以了.如果你这样做,你可能想用a 在你的字符串中StringBuilder构建大约330 #秒(double.Epsilon大约是E-324的顺序).

  • @Beska当你可以做`var format ="时,使用循环是没有意义的." + new string('#',324)` (2认同)