.NET:double值的最短可能字符串表示形式

时间:2016-11-01 16:28:08

标签: c# .net formatting double number-formatting

通用(“G”)格式说明符将数字转换为定点或科学符号的更紧凑。问题是指数中仍然可以有前导零。

示例:

Double d = 0.000001;
Console.WriteLine(d.ToString("G"));

1E-06

是否有数字格式字符串将删除指数中的前导零,因此结果为

1E-6

如果它更紧凑,我仍然希望函数返回定点表示法。换句话说,我想要一个double值的最短字符串表示。

编辑:我想在没有后期处理的情况下这样做

2 个答案:

答案 0 :(得分:1)

您可以使用后处理删除前导零。

static string Compact(double d)
{
    var s = d.ToString("G");
    if(s.Contains("E-0") || s.Contains("E+0"))
    {
        s = Regex.Replace(s, @"(\d+)(E[+-])0+(\d+)", "$1$2$3");
    }

    return s;
}

用法

Console.WriteLine(Compact(0.000001)); // result: 1E-6
Console.WriteLine(Compact(12342353465345432313123123123.0)); // result: 1.23423534653454E+28
Console.WriteLine(Compact(0.000011)); // result: 1.1E-5

答案 1 :(得分:0)

这可以通过使用格式的速记版本并手动选择位数

来完成
Double d = 0.000001;
Console.WriteLine(d.ToString("0.###E-0"));

1E-6

我所做的确切版本将围绕一个数字,如0.0000012351573到1.235E-6

如果你真的想要最短的话,你可以使用

Console.WriteLine(d.ToString("0E-0"));

这将围绕它,但总是只有一个数字 - 例如

Double d = 0.0000018;
Console.WriteLine(d.ToString("0.###E-0"));

2E-6