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

3

当我使用标准数值格式"G4"将double类型转换成字符串时,结果如下:

.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 **

我该如何使用标准或自定义数字格式字符串来实现这一点?仅使用数字格式字符串是否可能实现这一点?

@GrantWinney:是的,我希望较小的值不要使用科学计数法。 - skybluecodeflier
如果有真正了解这不可能的人能够说出来,并且展示原因,我或许可以继续前进。 - skybluecodeflier
1个回答

1

希望有人能发布一个字符串格式,完全符合您的需求,但在此之前...

以下扩展方法将实现您想要的功能:

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]));
}

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

应该能够使用以下方式调用:

var input1 = .0000001;
var input2 = 10000;

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

1
+1,虽然在返回值中使用 ToInt32 可能是更好的选择,而不是 ToDouble - D Stanley
谢谢您的回复,但我的情况实际上只能使用数字格式字符串(与第三方dll一起工作)。 - skybluecodeflier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接