这是我的代码,没有完全完成,并且对波兰语言感到抱歉,但它很容易获得。 http://pastebin.com/QPmVaPFv 所以,这是关于兽医,4个变量是每个访客的价格: 大狗 2.中型犬 小狗 4.cat 之后接下来的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
然后我计算了最终价格,即没有折扣的正常价格
--- cena normalna: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.
答案 0 :(得分:1)
请勿使用float或double进行财务计算,请使用BigDecimal。
由于处理BigDecimal有点麻烦,我写了一个BdHelper类,以缩短某些操作/转换所需的代码。这个课并不是完整的,我真的只写了我需要的方法,但你明白了。
StackOverflow Dev Days London中的Jon Skeet talked about the pain of using floating point numbers。
答案 1 :(得分:0)
使用BigDecimal。 这是一个好的开始:Make cents with BigDecimal - JavaWorld。
答案 2 :(得分:0)
有一篇关于使用float,double,BigDecimal等进行计算的文章http://firstclassthoughts.co.uk/java/traps/java_double_traps.html
底线是没有完美的解决方案。