在更多地参与培训新工程师以及阅读Jon Skeet's DevDays presentation之后,我开始意识到许多工程师不清楚何时使用哪种数字数据类型。我欣赏正式的计算机科学学位在这方面所起的作用,但我看到许多新工程师表现出不确定性,因为他们从未处理过大型数据集、金融软件、编程物理或统计问题或复杂的数据存储问题。
我的经验是,当在上下文中解释概念时,人们真的会理解它们。我正在寻找真实编程问题的好例子,其中某些数据使用数据类型表示得最好。如果可能的话,尽量远离课本上的例子。我正在使用Java对此进行标记,但请随意使用其他语言提供示例并重新标记:
整数、长整型、双精度、浮点型、BigInteger等...
发布于 2009-11-07 12:39:24
我真的不认为你需要示例或任何复杂的东西。这很简单:
- Does it need to be exact? (example: monetary amounts!)
- BigDecimal
(当我说">“时,当然是指”绝对值更大“。)
我从未使用字节或字符来表示数字,也从未使用过短的句号。这是在12年的Java编程中。浮动?嗯。如果你有一个巨大的数组,并且你有内存问题,我猜。
请注意,BigDecimal的名称有些错误;您的值根本不需要很大就可以使用它。
发布于 2009-11-07 12:28:43
当涉及到维护精确的浮点计算,并且能够指定所需的精度时,BigDecimal是最好的。我相信float (在某种程度上是双倍的)提供了比BigDecimal更好的性能,但代价是准确性和可用性。
发布于 2009-11-07 15:55:18
您可能想要阐明的重要一点是,比较浮点数是否相等几乎总是错误的。例如,以下代码很可能失败:
double euros = convertToEuros(item.getCostInDollars());
if (euros == 10.0) {
// this line will most likely never be reached
}这就是为什么你想使用离散数字来表示货币的原因之一。
当你绝对需要比较浮点数时,你只能做近似的比较;在某种程度上:
double euros = convertToEuros(item.getCostInDollars());
if (Math.abs(euros - 10.0) < EPSILON) {
// this might work
}至于实际例子,我通常的经验法则是这样的:
BigInteger:如果您知道这些,很可能您已经知道自己在做什么,所以不需要我的建议
我知道这些不是非常科学的经验法则,但如果你的目标受众不是计算机科学家,最好还是坚持基础知识。
https://stackoverflow.com/questions/1691876
复制相似问题