变量疯狂,舍入数(int,double等)

时间:2011-11-12 13:35:54

标签: java math variables numbers

这是我的代码,没有完全完成,并且对波兰语言感到抱歉,但它很容易获得。 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.

3 个答案:

答案 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

底线是没有完美的解决方案。