仅在需要时使用科学记数法

时间:2013-02-25 17:15:47

标签: c# string-formatting number-formatting

我想将double值解析为string。我希望我的号码具有指定的位数(直到运行时才会知道)。如果这个数字可以用数字的非零值表示,这就是我想要的。如果数字是这样的零,我希望用科学记数法表示。

一些例子会使这更清楚,这假设我想要3位数字:

价值 .2367 输出“0.23”

价值 .00367 输出“3.67E-3”

价值 22.3 输出“22.3”

价值:3364.0 输出“3.36E3”

我的解决方案是使用ToString()方法和N numeric format string,如果它导致零恢复为E格式字符串,但这感觉就像重新发明轮。有没有人知道内置方法是否可以做到这一点?

1 个答案:

答案 0 :(得分:15)

您是否考虑过使用General Number Format Specifier

  

通用(“G”)格式说明符将数字转换为最多   紧凑的定点或科学记数法,取决于   数字的类型以及是否存在精度说明符。

文档中的一些示例:

double number;

number = .0023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 0.0023

number = 1234;
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture));
// Displays 1.2E+03

number = Math.PI;
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture));
// Displays 3.1416