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

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

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

价值: .2367 输出: “0.23”

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

价值: 22.3 产出: “22.3”

价值: 3364.0 输出: “3.36E3”

我的解决方案是使用ToString()方法和N 数字格式字符串 ,如果它导致零恢复到E格式字符串,但这感觉就像重新发明轮子。 有谁知道一个内置的方法来做到这一点?

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

通用(“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