【问题标题】:Adjusting the "G" Format specifier's method of displaying the exponential format (or replacing with custom numeric string)调整“G”格式说明符显示指数格式的方法(或替换为自定义数字字符串)
【发布时间】:2014-09-13 23:53:29
【问题描述】:

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

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

【问题讨论】:

  • @GrantWinney:是的,我希望较小的值不是科学记数法。
  • 如果真正知道这是不可能的人可以这么说,并说明原因,我也许可以继续前进。

标签: c# double number-formatting


【解决方案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]));
}

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

应该可以调用它:

var input1 = .0000001;
var input2 = 10000;

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

【讨论】:

  • +1,尽管在返回值中ToInt32 可能是比ToDouble 更好的选择。
  • 感谢您的回复,但在我的情况下,我实际上仅限于使用数字格式字符串(使用第 3 方 dll)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
相关资源
最近更新 更多