【问题标题】:How to Convert Positive or Negative Scientific Notation to Number in C#? [duplicate]如何在 C# 中将正或负科学记数法转换为数字? [复制]
【发布时间】:2016-08-19 00:03:23
【问题描述】:

我试过这两个代码:

1)

Decimal h2 = 0;
Decimal.TryParse("-8.13E-06", out h2);

2)

Decimal.Parse(Convert.ToString(used[row, column].Value), NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint); 

但它不适用于 -8.13E-06 价值。

还有其他更好的将科学记数法转换为十进制的选择吗?

提前致谢。

【问题讨论】:

  • 你能解释一下“不工作”是什么意思吗?您是否收到错误或意外值?
  • 在第一个代码中我得到 0;
  • 在第二个代码中,我收到错误为不正确的输入字符串
  • 使用TryParse 方法时,您确实应该捕获bool 结果或在if 语句中使用它,以便处理失败的情况。

标签: c# type-conversion decimal data-conversion scientific-notation


【解决方案1】:

如果您的文化使用“。”作为分隔符:

decimal d = Decimal.Parse("-8.13E-06", System.Globalization.NumberStyles.Float);

或者你可以指定InvariantCulture:

decimal d = Decimal.Parse("-8.13E-06", System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture);

或在您的示例中:

Decimal h2 = 0;
Decimal.TryParse("-8.13E-06", NumberStyles.Float, CultureInfo.InvariantCulture, out h2);

【讨论】:

  • decimal d = Decimal.Parse("-8.13E-06", System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture); 效果很好,非常感谢。
【解决方案2】:

AllowExponent 不会按以下方式工作: https://msdn.microsoft.com/en-us/library/system.globalization.numberstyles(v=vs.110).aspx

表示数字字符串可以是指数表示法。 AllowExponent 标志允许解析的字符串包含指数 以“E”或“e”字符开头,后跟一个 可选的正号或负号和一个整数。换句话说,它 成功解析 nnnExx、nnnE+xx 和 nnnE-xx 形式的字符串。 它不允许使用小数分隔符或在有效位上签名或 尾数;要允许解析字符串中的这些元素,请使用 AllowDecimalPoint 和 AllowLeadingSign 标志,或使用复合样式 包括这些单独的标志。

System.Globalization.NumberStyles.Float 就是这样的复合样式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多