除以100返回0

时间:2013-06-06 11:44:34

标签: java

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

        a.price=sc.nextInt();

        a.vat=sc.nextInt();

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

'total'定义为FLOAT而不是INT

6 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:6)

欢迎使用整数运算。您希望使用floatdouble值执行此操作,很有可能您应该BigDecimal使用maintain precision

答案 2 :(得分:4)

小心使用Java中的“/ 100”操作会导致计算错误并且操作成本很高(认为/操作是在二进制系统中完成的,而不是在十进制系统中完成的。)

我在一个银行项目中,所有金额都是长值的两位小数(例如123.45€是12345),所以我们必须做同样的操作(“/ 100”)。我们发现有些金额导致了一轮计算......错过了一分钱(这在银行业是不可接受的)。

然而,BigDecimal使用简单的“movePointLeft”处理相同的操作,因此我建议您使用下一个代码:

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

答案 3 :(得分:2)

问题是你在float变量中放置的是对整数运算的结果:它是一个整数。换句话说,a.precio * a.iva / 100首先被计算为一个整数(这是你失去精度的地方),然后这个整数被分配给a.total作为浮点数。

因此,您需要指定必须通过转换整数值来对浮点数执行操作a.precio * a.iva / 100

更改

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

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

答案 4 :(得分:2)

您必须转换整数,否则您的结果将在分配给a.total之前计算为整数。类似的东西:

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

答案 5 :(得分:2)

至少在分割操作数上必须是float或double,因此结果是double。否则除法结果为整数。

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

或者如果你真的需要浮动,你可以跳过一些精度

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