【问题标题】:numeric conversion for 20 digits [duplicate]20位数字的数字转换[重复]
【发布时间】:2014-04-09 15:23:28
【问题描述】:

大家好,我有一个 20 个字符的数字,如下 34432523434234423434,我尝试使用 long,UInt64 进行这种转换,但我仍然遇到异常 Value was either too large or too small 所以有人可以帮我解决如何转换它价值

【问题讨论】:

  • 试试Decimal.Parsedecimal 数据类型适合你的需要。
  • 将其转换为大整数BigInteger i = new BigInteger(); i = BigInteger.Parse("34432523434234423434");

标签: c#


【解决方案1】:

您的值实际上是 65 位长,所以无论您如何更改它的类型,它都不适合 64 位变量。

2**64      = 18446744073709551616
your value = 34432523434234423434

【讨论】:

  • 我尝试使用 biginteger 如下,但我仍然无法达到BigInteger assignedFromLong = (BigInteger)34432523434234423434;
【解决方案2】:

大整数实际上并不限于 20 位,它们仅限于可以用 64 位表示的数字(例如,数字 99,999,999,999,999,999,999 不是有效的大整数,尽管它是 20 位长)。

您有此限制的原因是,底层硬件可以相对快速地操作原生格式整数,而数字的文本版本(往往)需要一次处理一个数字。

如果您想要一个大于最大 64 位无符号整数 18,446,744,073,709,551,615 的数字,那么您需要将其存储为字符串(或其他文本字段),并希望您不需要对其进行太多数学操作。

或者,您可以查看具有较大范围但精度较低的浮点数,或应该能够为您提供 65 位整数值的十进制数,使用 decimal(65,0) 作为列类型。

【讨论】:

  • C# 中没有 varchar。通常是一个很好的答案,除了 varchar 的东西。另外,为什么要对可以存储在十进制中的值进行字符串化?
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
相关资源
最近更新 更多