首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正确的数字数据类型

使用正确的数字数据类型
EN

Stack Overflow用户
提问于 2009-11-07 11:28:03
回答 5查看 6.8K关注 0票数 9

在更多地参与培训新工程师以及阅读Jon Skeet's DevDays presentation之后,我开始意识到许多工程师不清楚何时使用哪种数字数据类型。我欣赏正式的计算机科学学位在这方面所起的作用,但我看到许多新工程师表现出不确定性,因为他们从未处理过大型数据集、金融软件、编程物理或统计问题或复杂的数据存储问题。

我的经验是,当在上下文中解释概念时,人们真的会理解它们。我正在寻找真实编程问题的好例子,其中某些数据使用数据类型表示得最好。如果可能的话,尽量远离课本上的例子。我正在使用Java对此进行标记,但请随意使用其他语言提供示例并重新标记:

整数、长整型、双精度、浮点型、BigInteger等...

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-07 12:39:24

我真的不认为你需要示例或任何复杂的东西。这很简单:

  • 它是整数吗?
    • 它可以大于2^63吗?BigInteger
    • 是否可以大于2^31?long
    • 否则为long

  • 是十进制数吗?
    • 是一个近似值? ok?

代码语言:javascript
复制
- Does it need to be exact? (example: monetary amounts!)  
    - BigDecimal

(当我说">“时,当然是指”绝对值更大“。)

我从未使用字节或字符来表示数字,也从未使用过短的句号。这是在12年的Java编程中。浮动?嗯。如果你有一个巨大的数组,并且你有内存问题,我猜。

请注意,BigDecimal的名称有些错误;您的值根本不需要很大就可以使用它。

票数 28
EN

Stack Overflow用户

发布于 2009-11-07 12:28:43

当涉及到维护精确的浮点计算,并且能够指定所需的精度时,BigDecimal是最好的。我相信float (在某种程度上是双倍的)提供了比BigDecimal更好的性能,但代价是准确性和可用性。

票数 4
EN

Stack Overflow用户

发布于 2009-11-07 15:55:18

您可能想要阐明的重要一点是,比较浮点数是否相等几乎总是错误的。例如,以下代码很可能失败:

代码语言:javascript
复制
double euros = convertToEuros(item.getCostInDollars());
if (euros == 10.0) {
  // this line will most likely never be reached
}

这就是为什么你想使用离散数字来表示货币的原因之一。

当你绝对需要比较浮点数时,你只能做近似的比较;在某种程度上:

代码语言:javascript
复制
double euros = convertToEuros(item.getCostInDollars());
if (Math.abs(euros - 10.0) < EPSILON) {
  // this might work
}

至于实际例子,我通常的经验法则是这样的:

  • double:在使用之前深思熟虑;痛苦值得吗?
  • float:不要使用它
  • byte:最常用作byte[]来表示一些原始的二进制数据和代码int:这是您最好的朋友;使用它来表示大多数内容<>H111>:将它用于时间戳和数据库IDs
    • BigDecimal

    BigInteger:如果您知道这些,很可能您已经知道自己在做什么,所以不需要我的建议

我知道这些不是非常科学的经验法则,但如果你的目标受众不是计算机科学家,最好还是坚持基础知识。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1691876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档