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

标签 c# double number-formatting

当我使用标准数字格式“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 **

如何使用标准或自定义数字格式字符串完成此操作?这甚至可能仅使用数字格式字符串吗?

最佳答案

如果有人发布了一个完全符合您需要的字符串格式,那就太好了,但在那之前......

以下扩展方法将执行您想要的操作:

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+044

应该可以使用以下方式调用它:

var input1 = .0000001;
var input2 = 10000;

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

关于c# - 调整 "G"格式说明符显示指数格式的方法(或替换为自定义数字字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24899608/

相关文章:

c# - Progress<T> 类和同步问题

c# - 检测 Windows 7 审核模式

c# - switch 语句中的 switch 语句?

c# - 线程池设计问题

Java 将 long 转换为 currency

c# - Json.NET 中的数字格式 "R"

c++ - 为什么int提升为double而不是float进行隐式转换

java - 为什么当 Intent 双值时我得到 null

c# - 在 C# 中将字符串转换为 double

python - python中的数字格式