相关疑难解决方法(0)

用Java表示货币价值

我知道BigDecimal是用于在Java中表示货币价值的推荐最佳实践.你用什么?您是否更喜欢使用更好的库?

java currency bigdecimal

92
推荐指数
5
解决办法
4万
查看次数

Java双重比较

有没有用于进行双重比较的java库?例如

public static boolean greaterThanOrEqual(double a, double b, double epsilon){
     return a - b > -epsilon;
}
Run Code Online (Sandbox Code Playgroud)

我开始的每个项目我最终都会重新实现这个并复制粘贴代码和测试.

NB为什么更好地使用第三方JAR的一个很好的例子是IBM推荐以下内容:

"如果您不知道基础测量的规模,使用测试"abs(a/b - 1)<epsilon"可能比仅仅比较差异更加稳健"

我怀疑很多人会想到这一点,并说明即使是简单的代码也可能是次优的.

java double

14
推荐指数
1
解决办法
1万
查看次数

Float.equals(几乎)是完全无用的,我应该使用什么呢?

考虑到:

看起来像当前形式的Float.equals几乎完全没用.

我是否遗漏了某些东西,或者有时候使用Float.equals是合适的,除非你想要测试二进制相等的极其罕见的情况?

如果是这样,滚动你自己的identikit epsilon函数(如第一个链接中所推荐的那样)是否真的是完成的事情,或者是否存在这个令人难以置信的常见操作的现有包装器?

另外,Double/Float.compare是否会遇到同样的问题,或者是否存在需要epsilon的现有比较器?

(请注意,我无法将现有库从Floats更改为BigD)

java

7
推荐指数
1
解决办法
197
查看次数

使用Double进行财务软件

我知道这个问题已经多次讨论过,但我对答案并不完全满意.请不要回答"双打不准确,你不能代表0.1!你必须使用BigDecimal"......

基本上我正在做一个财务软件,我们需要在内存中存储很多价格.BigDecimal太大了,无法容纳缓存,因此我们决定切换到double.到目前为止,我们没有因为正当理由而遇到任何错误,我们需要12位数的准确度.12位数的估计基于这样一个事实:即使我们以百万谈话,我们仍然能够处理美分.

double给出15位有效十进制数字精度.如果你在显示/比较它们时绕过你的双打,会出现什么问题?

我猜问题是不准确的积累,但有多糟糕呢?在它影响第12位之前需要多少次操作?

你看到双打的其他问题吗?

编辑:关于很久,这绝对是我们所想到的.我们正在做很多除法乘法,长期不会很好地处理(丢失小数和溢出),或者至少你必须非常小心你所做的.我的问题更多的是关于双打理论,基本上有多糟糕,是否可以接受不准确?

编辑2:不要试图解决我的软件,我不准确:).我重新提出这样一个问题:如果你只需要12个数字并且在显示/比较时你是否会翻倍,那么不准确的可能性有多大?

java floating-point double bigdecimal ieee-754

3
推荐指数
3
解决办法
1057
查看次数

标签 统计

java ×4

bigdecimal ×2

double ×2

currency ×1

floating-point ×1

ieee-754 ×1