【问题标题】:How to store BIG int values如何存储 BIG int 值
【发布时间】:2014-07-31 17:20:13
【问题描述】:

如果您必须保存大于 ulong 类型可以容纳的数字(0 到 18,446,744,073,709,551,615),您会使用什么?例如测量行星或星系之间的距离?

  • 当你测量星系之间的距离时,你不再使用米了:-)
  • 对,就是这样。如果没记错的话,单位会变成light years

标签: c#


【解决方案1】:

对于最多只需要 28 位的值,您可以使用 System.Decimal。按照它的设计方式,您不会遇到使用 double 进行的缩放问题,其中对于较大的数字,两个相邻数字之间的差距大于 1。诚然,这看起来有点奇怪,因为 decimal通常用于非整数值 - 但在某些情况下,我认为这是一个完全合理的用途,只要你正确记录它。

对于大于此的值,您可以使用System.Numerics.BigInteger

另一种选择是只使用double 并接受你真的精确到整数。当谈到星系之间的距离时,你真的会有一个值吗?准确的还是一米?这确实取决于你将如何使用它——它当然可以测试如果您使用一个可以很好预测的整数类型,则更简单,但是您应该真正考虑这些值将去哪里以及您将如何处理它们。

【讨论】:

  • 等等,你的意思是(长)**一万亿** + 1 不会产生预期的结果?
  • 只是好奇,但 BigInteger 有 MaxValue 吗?该文档似乎表明它没有
  • 文档说 bigint 存储的值从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 小于 ulong technet.microsoft.com/en-us/library/aa933198(v=sql.80).aspx 的最大值
  • @iConqueror:您发布的链接适用于 SQL Server 的bigint。它与 C# 的 BigInteger 没有任何关系。
  • @Sayse:鉴于它“任意大”,MaxValue 是什么意思?
【解决方案2】:

我相当怀疑您是否需要整数类型来存储诸如星系之间的距离之类的东西。据我所知,在少数情况下需要非常大的整数值,例如(演示性)加密。对于这些情况,您可以使用System.Numerics.BigInteger

我认为您应该将浮点类型(例如double)用于您描述的目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多