java - 疯狂变量、舍入数(int、double 等)

标签 java math variables numbers

这是我的代码,尚未完全完成,对波兰语感到抱歉,但很容易得到它。 http://pastebin.com/QPmVaPFv 所以,这是关于 vert 的,每个访客的价格有 4 个变量: 1.大狗 2.中型犬 3.小型犬 4.猫 接下来的 4 个变量是访客数量,与之前相同(大、中、小、猫等)

然后文字说: 每第 5 位大型犬主人均可享受 10% 的折扣 每第三位中型业主均可享受 50% 的折扣 每 4 个猫主人的价格为 1 美元,即

double zdpies=ldpies/5.;
double zspies=lspies/3.;
double zkot=ckot/4.;

这是有折扣的部分

之后我创建了变量并计算折扣价格

double cdpiespromo=cdpies/10.; Big dog
double cspiespromo=cspies/50.; medium dog
double ckotpromo=1; Cat

然后我计算了最终价格,即没有折扣的正常价格

--- 正常值:21.6 x 51.0 = 1101.6000000000001

流程已完成。

我得到了那个奇怪的数字,51。可以,但是 21.6 是错误的,一定是 22 而不是 21.6。当我使用“int”时,它说存在“精度损失”,有什么想法如何解决这个问题吗?

以下是用于计算折扣和无折扣最终价格的最后一个变量。

double idp=ldpies-zdpies; this calculates numbers of visitors without discount
double idc=idp*cdpies; this calculates price number of visitor * normalpriceofbigdog.

最佳答案

不要使用 float 或 double 进行财务计算,使用 BigDecimal

由于处理BigDecimal有点麻烦,所以我写了一个BdHelper类,以缩短某些操作/转换所需的代码。该类并不意味着完整,我实际上只编写了我需要的方法,但你明白了。

Jon Skeet talked about the pain of using floating point numbers伦敦 StackOverflow 开发日。

关于java - 疯狂变量、舍入数(int、double 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8104754/

相关文章:

c++ - 随机变量名,可能吗?

java - @Value 不是通过 Java 配置的测试上下文设置的

java - Jackson 生成意外的 "new"字段

java - Tomcat 如何处理 keystore 中的多个 SSL 证书?

c++ - 标准数学函数能否正确处理无穷大?

algorithm - 找到反向算法回到初始值

java - Soundcloud Java Api包装程序重复文件错误

python-3.x - 这个函数的时间复杂度是多少,它生成一个数字的所有唯一因子组合?

javascript - 在 redux 函数中重构变量

c# - var 关键字运行时还是编译时?