【问题标题】:Use scientific notation only if needed仅在需要时使用科学记数法
【发布时间】:2013-02-10 22:13:43
【问题描述】:

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

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

值: .2367 输出:“0.23”

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

值: 22.3 输出:“22.3”

值: 3364.0 输出:“3.36E3”

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

【问题讨论】:

  • 第一个不想要 2.37E-1 吗?
  • 实际上我的偏好是只在所有值都为 0 时使用科学记数法,但任何一种方式都足够了。

标签: c# string-formatting number-formatting


【解决方案1】:

您是否考虑过使用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 

【讨论】:

  • 我不知道我是如何设法在文档中忽略这一点的。
猜你喜欢
  • 2019-08-13
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
相关资源
最近更新 更多