【问题标题】:Input String was not in a correct format error from Decimal.Parse when precision is greater than 4当精度大于 4 时,输入字符串的格式不正确,来自 Decimal.Parse
【发布时间】:2015-06-14 00:58:34
【问题描述】:

我在尝试使用Decimal.Parse 转换小数点时遇到问题,小数点精度为 4 或更高。它抛出错误:

输入字符串的格式不正确”当它尝试执行 精度为 0.00006 或更高的函数。

我已尝试使用 InvariantCulture 并排除了此问题,因为我看到有人建议使用此错误。

我也尝试过使用decimal.Parse 无济于事。

正在执行的代码行是:

Decimal decVal = Decimal.Parse(Value.ToString())

其中 value 是字符串“0.00006”。

以前有没有其他人见过这个问题?这是Decimal.Parse 函数固有的问题,还是我正在做的事情?

【问题讨论】:

  • 对我有用 - 这可能是文化问题(或者字符串中有不可见的字符)
  • 我稍微编辑了您的代码以使用格式,在此过程中,我用变量替换了一行英文描述。我所做的一切是否正确,这段代码是否仍然重现您的问题?我讨厌如此大幅度地更改代码,但它需要被格式化,所以我想仔细检查。
  • 对字符串调用 ToString() 的程序员确实会遇到奇怪的问题。它实际上是一个字符串吗?
  • @HansPassant 如果我不得不猜测,我会说它是一个浮点数。 ToString() 调用将导致科学记数法在 decimal.Parse 上失败的精度
  • @DStanley 我怎么知道字符串中是否有不可见的字符?在调试器中,它看起来只是那个字符串,但是否仍有可能在其中以某种方式存在我没有看到的额外字符? petelids 和 Hans Passant 我不认为它是一个浮点数,我尝试转换为一个 Decimal 并且没有工作,如果它是一个浮点数会起作用。它是一个字符串对象。奇怪的是它可以在任何低于 4 的小数精度下工作,因此导致它出错的精度是多少。

标签: c# type-conversion decimal


【解决方案1】:

我想通了。结果表明,当精度超过 4 位时,ToString 会返回科学计数法,因此解决方法是使用以下代码:

Decimal decVal = Decimal.Parse(Value.ToString(), NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint)

通过阅读这个问题想通了: How to convert this scientific notation to decimal?

感谢所有提供意见的人!

【讨论】:

  • 太棒了,不是说您可以将自己的答案标记为您问题的正确答案吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-23
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多