调整"G"格式说明符显示指数格式(或替换为自定义数字字符串)的方法



当我使用标准数字格式"G4"将双精度对象显示为字符串时,我得到以下结果:

.0000001 -> 1E-07
.000001 -> 1E-06
.00001 -> 1E-05
.0001 -> 0.0001
.001 -> 0.001
.01 -> 0.01
.1 -> 0.1
1 -> 1
10 -> 10
100 -> 100
1000 -> 1000
10000 -> 1E+04
100000 -> 1E+05

我更喜欢下面的(更改行用星号表示):

.0000001 -> 1E-7 **
.000001 -> 1E-6 **
.00001 -> 1E-5 **
.0001 -> 0.0001
.001 -> 0.001
.01 -> 0.01
.1 -> 0.1
1 -> 1
10 -> 10
100 -> 100
1000 -> 1000
10000 -> 1E4 **
100000 -> 1E5 **

如何使用标准或自定义数字格式字符串完成此操作?这是可能的,甚至只是一个数字格式字符串?

如果有人发布了一个字符串格式,正好满足了你的需求,那就太好了,但在那之前…

下面的扩展方法可以满足您的要求:

public static string ToFormattedString(this double i)
{
    var sciNumber = i.ToString("G4");
    // If the number has no exponent (such as .0001 or 100), return it as-is
    if (!sciNumber.Contains("E"))
        return sciNumber;
    var parts = sciNumber.Split('E');
    return string.Concat(parts[0], "E", Convert.ToInt32(parts[1]));
}

通过获取字符串的指数部分并将其再次转换为双精度类型,我们可以(作为副作用)最终将-07转换为-7, +04转换为4

应该能够使用:

var input1 = .0000001;
var input2 = 10000;
var output1 = input.ToFormattedString();  // 1E-7
var output2 = input.ToFormattedString();  // 1E4

最新更新