C# 仅在需要时使用科学符号

C# 仅在需要时使用科学符号,c#,string-formatting,number-formatting,C#,String Formatting,Number Formatting,我想将一个double值解析为字符串。我希望我的号码具有指定的位数(直到运行时我才知道)。如果这个数字可以用数字的非零值来表示,这就是我想要的。如果数字是零,就像这样,我想用科学的符号来表示 一些示例将更清楚地说明这一点,假设我需要3位数字: 值:.2367输出:“0.23” 值:.00367输出:“3.67E-3” 值:22.3输出:“22.3” 值:3364.0输出:“3.36E3” 我的变通解决方案将使用该方法和N,如果它导致zero恢复为E格式字符串,但这感觉像是重新发明了轮子。有人知道

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

一些示例将更清楚地说明这一点,假设我需要3位数字:

值:.2367输出:“0.23”

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

值:22.3输出:“22.3”

值:3364.0输出:“3.36E3”


我的变通解决方案将使用该方法和
N
,如果它导致zero恢复为
E
格式字符串,但这感觉像是重新发明了轮子。有人知道是否有内置的方法可以做到这一点吗?

您是否考虑过使用

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

文档中的一些示例:

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 

你不想要2.37E-1作为第一个吗?事实上,我倾向于只在所有值都为0的情况下使用科学符号,但任何一种方法都足够。我不知道我是如何在文档中忽略了这一点的。