2013-02-25 46 views
5

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

一些例子将会使这更清楚,这是假定我希望3位:

值: 0.2367 输出: “0.23”

值: 0.00367 输出: “3.67E-3”

Value: 22.3 Output: “22.3”

值: 3364.0 输出:“3.36E3”

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

+2

难道你不希望2.37E-1的第一个? – 2013-02-25 17:18:23

+0

实际上,如果所有的值都是0,我的偏好是只使用科学记数法,但任何一种方法都可以。 – Fr33dan 2013-02-25 18:20:21

回答

14

您是否看过使用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 
+0

我不知道我是如何在文档中忽略这一点的。 – Fr33dan 2013-02-25 18:16:33