Java 除以100返回0

Java 除以100返回0,java,Java,我只是想计算增值税,但当我除以100得到总价(价格*增值税/100)时,它返回0.0。这是我的密码: a.price=sc.nextInt(); a.vat=sc.nextInt(); a.total=a.precio*a.iva/100; “total”被定义为FLOAT而不是INT问题在于,您在FLOAT变量中输入的是整数运算的结果:它是一个整数。换言之,a.precio*a.iva/100首先计算为一个整数(这就是失去精度的地方),然后

我只是想计算增值税,但当我除以100得到总价(价格*增值税/100)时,它返回0.0。这是我的密码:

        a.price=sc.nextInt();

        a.vat=sc.nextInt();

        a.total=a.precio*a.iva/100;

“total”被定义为FLOAT而不是INT

问题在于,您在FLOAT变量中输入的是整数运算的结果:它是一个整数。换言之,
a.precio*a.iva/100
首先计算为一个整数(这就是失去精度的地方),然后将该整数作为浮点分配给
a.total

因此,您需要指定操作
a.precio*a.iva/100
必须通过强制转换整数值在浮点上完成

改变

a.total=a.precio*a.iva/100;


您需要将表达式强制转换为
float
。我在这里使用了浮点文本
100.0f

a.total= a.precio*a.iva/100.0f;

您必须强制转换整数,否则在分配给
a.total
之前,您的结果将被计算为整数。比如:

a.total = (float)(a.precio) * (float)(a.iva) / 100;

至少有个除法操作数必须为浮点或双精度,因此结果为双精度。否则,除法结果为整数

a.total=a.precio*a.iva/100.0
或者如果你真的需要浮动,你可以跳过一些精度

a.total=(float)(a.precio*a.iva/100.0)

欢迎使用整数算术。您希望使用
float
double
值来执行此操作,很可能您应该使用
BigDecimal
来执行此操作。

在Java中小心使用“/100”操作,这可能会导致计算错误,并且是一个代价高昂的操作(请认为/操作是在二进制系统中完成的,而不是在十进制系统中完成的)

我在一个银行项目中,所有金额的长值都是两位小数(例如123.45欧元是12345欧元),因此我们必须做与您相同的操作(“/100”)。我们发现一些数量导致了四舍五入的计算。。。少了一分钱(这在银行业是不可接受的)

但是,BigDecimal使用简单的“movePointLeft”处理相同的操作,因此我建议您使用下面的代码:

total = (BigDecimal.valueOf(price * VAT)).moveLeft(2).doubleValue()

“a”是什么类型的?请提供一个完整的例子。正如@BrianAgnew所提到的,使用
BigDecimal
表示金融信息。使用
float
double
可能会导致计算错误。对于财务计算,最好像其他人所指出的那样使用
BigDecimal
。@UwePlonus是的,我知道,我刚刚回答了一个基本问题,除以100返回0。Op至少应该得到整数和float算术的基本知识,在使用JavaAPI之前,强制转换和表达式是正确的。
total = (BigDecimal.valueOf(price * VAT)).moveLeft(2).doubleValue()