调整“G"格式说明符's显示指数格式的方法(或用自定义数字字符串替换)
本文关键字:格式 自定义 数字 数字字符 字符串 方法 替换 指数 quot 说明符 调整 | 更新日期: 2023-09-27 18:14:21
当我使用标准数字格式"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