这是我的代码,尚未完全完成,对波兰语感到抱歉,但很容易得到它。 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/