建议在处理现实世界的货币值时,使用BigDecimal而不是Double。但是我没有令人信服的解释,只是“通常是这样做的”。
您能谈谈这个问题吗?
这称为精度损失,在处理非常大的数字或非常小的数字时非常明显。在许多情况下,带小数的十进制数字的二进制表示形式是近似值,而不是绝对值。要了解为什么需要阅读二进制形式的浮点数表示形式。这是链接:http : //en.wikipedia.org/wiki/IEEE_754-2008。快速演示:
在bc(任意精度计算器语言)中,精度为10:
(1/3 + 1/12 + 1/8 + 1/30)= 0.6083333332
(1/3 + 1/12 + 1/8)= 0.541666666666666
(1/3 + 1/12)= 0.416666666666666
Java两倍:
0.6083333333333333
0.5416666666666666
0.41666666666666663
Java浮点数:
0.60833335
0.5416667
0.4166667
如果你是一家银行,并且每天要处理数千笔交易,即使它们不是往返于同一帐户(或也许是同一帐户),你也必须拥有可靠的号码。二进制浮点数不可靠-除非你了解它们的工作原理及其局限性,否则不可靠。
问题内容: 从log.go(执行日志包): 只是一个函数包装器,为什么我应该用它代替or ? 有实际原因吗? 问题答案: 两件事不同: 通过包日志进行打印对于并发goroutine是安全的(而普通的则不是) 日志可以自动添加计时信息。 因此,这是两件完全不同的事情。log用于记录和格式化。(好吧,log使用相同的动词和标志,但这很方便)。
问题内容: Python 2.6引入了一个功能。 为什么有这个必要?可以总是输入而不是。 后者更多吗? 问题答案: PEP 3114描述了此更改。动机摘录: 该PEP建议将该方法重命名为,与Python中所有其他协议一致,在该协议中隐式调用方法作为语言级协议的一部分,并引入一个名为的内置函数来调用方法,与显式调用其他协议的方式。 请务必阅读此PEP,以获取更多有趣的细节。 至于为什么 你 要使用内
从外观上看-似乎创建了一个对象的克隆。如果是这样,那么对于实现可克隆接口(只有不可变对象是新的,因为可变对象有引用复制)的关注,哪一个是最好的,为什么? 我昨天实现了克隆,然后意识到我必须为非字符串/首字母元素提供自己的修改。然后我被告知我现在正在使用的。这两个实现似乎都提供了类似的功能。 谢谢
问题内容: 我有2个线程T1和T2,两者都有不同的工作,因此通常我们更喜欢通过线程Joins完成此任务。 但是我们无需使用join()就可以做到这一点。我们可以在T1线程中添加T2线程的代码。这有什么区别? 问题答案: 主要区别在于,当我们将T2线程与T1连接在一起时,T2执行该任务的时间也可以由T1占用,这意味着它们将并行执行不同的任务。但是,当您在T1中包含T2线程代码时,不会发生这种情况。线
问题内容: 我正在解决这个问题,有没有一种方法可以覆盖Java中的类变量? 第36条反对意见是: 如果您看到,请运行。 谁能解释为什么皱眉呢? 问题答案: 这是一个风格上的问题,而不是直接的问题。这表明您没有正确考虑班上正在发生的事情。 考虑一下什么意思: 此变量存在于类级别,在每个实例 中并不单独存在,并且在扩展me的类中没有独立存在 。 考虑一下什么意思: 该变量可以在此类,同一包中的 类以及
问题内容: Java中的原始类型是什么?为什么我经常听到不应该在新代码中使用它们的信息? 如果我们不能使用原始类型,那有什么选择呢?有什么更好的选择? 问题答案: 什么是原始类型? Java语言规范对原始类型的定义如下: JLS 4.8原始类型 原始类型定义为以下之一: 通过采用通用类型声明的名称而没有随附的类型参数列表而形成的引用类型。 数组类型,其元素类型为原始类型。 未从的超类或超接口继承s