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

Fr3*_*dan 5 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 数字格式字符串,如果它导致零恢复到E格式字符串,但这感觉就像重新发明轮子.有谁知道一个内置的方法来做到这一点?

Pau*_*sik 15

您是否看过使用通用数字格式说明符

通用("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 
Run Code Online (Sandbox Code Playgroud)