Java 变量疯狂度、舍入数(整数、双精度等)

Java 变量疯狂度、舍入数(整数、双精度等),java,math,variables,numbers,Java,Math,Variables,Numbers,这是我的代码,还没有完全完成,对不起波兰语,但很容易得到它。 所以,这是关于vet的,4个变量是每个访问者的价格: 1.大狗 2.中型狗 3.小狗 4.猫 之后,接下来的4个变量表示访客数量,与之前相同(大、中、小、猫等) 然后文本说: 每五位大狗主人可获得10%的折扣 每三位中型车主可获得50%的折扣 每四只猫的主人得到1美元的价格,即 double zdpies=ldpies/5.; double zspies=lspies/3.; double zkot=ckot/4.; 这是有折扣的那

这是我的代码,还没有完全完成,对不起波兰语,但很容易得到它。 所以,这是关于vet的,4个变量是每个访问者的价格: 1.大狗 2.中型狗 3.小狗 4.猫 之后,接下来的4个变量表示访客数量,与之前相同(大、中、小、猫等)

然后文本说: 每五位大狗主人可获得10%的折扣 每三位中型车主可获得50%的折扣 每四只猫的主人得到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.600000000001

进程已完成

我得到了奇怪的数字,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有点麻烦,我编写了一个类,以缩短某些操作/转换所需的代码。这个类并不意味着完整,我只写了我需要的方法,但是你明白了

在伦敦的日子里。

跟我走。
这是一个好的开始:。

这里有一篇关于使用float、double、BigDecimal等进行计算的好文章


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

您需要使用以10为基数的十进制数据类型,而不是以2为基数的浮点类型。这篇文章很好,但还有一个问题,如果我没有关于Bigdecimal itp的研究,是否还有其他解决方案?