除以100返回0

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

a.price=sc.nextInt(); a.vat=sc.nextInt(); a.total=a.precio*a.iva/100; 

‘total’定义为FLOAT而不是INT

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

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

欢迎使用整数运算。 你想用floatdouble值来做这件事,你很可能应该使用BigDecimal来保持精度 。

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

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

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

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

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

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

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

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

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

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

问题是你在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;