双ToString-无科学符号

本文关键字:符号 ToString- | 更新日期: 2023-09-27 18:00:05

我刚刚发现了一个奇妙的"功能",即如果有足够的小数位数,.NET将默认使用科学记数法执行Double.ToString()

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

有人知道用标准(非科学)表示法将其显示为字符串的有效方法吗?

我看过这个问题,但前两个答案对我来说似乎有点古怪,因为它们都是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的情况。我还没有找到一种有效的方法来实现所有价值观。

双ToString-无科学符号

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

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

是的,这有点粗糙,但只要小数点后的位数不超过那么多,它就行。如果这样做,您可能希望使用StringBuilder在字符串中构建大约330个#double.Epsilon的数量级为E-324)。