1

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

        a.price=sc.nextInt();

        a.vat=sc.nextInt();

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

'total' 被定义为 FLOAT 而不是 INT

4

6 回答 6

19

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

a.total= a.precio*a.iva/100.0f;
于 2013-06-06T11:46:11.340 回答
8

欢迎来到整数算术。您想使用floatordouble值来执行此操作,并且很可能应该使用它BigDecimal保持精度

于 2013-06-06T11:47:37.507 回答
7

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

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

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

total = (BigDecimal.valueOf(price * VAT)).moveLeft(2).doubleValue()
于 2016-08-09T12:07:04.940 回答
2

问题是您放入浮点变量的是整数运算的结果:它是一个整数。换句话说,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;
于 2013-06-06T11:45:48.030 回答
2

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

a.total = (float)(a.precio) * (float)(a.iva) / 100;
于 2013-06-06T11:46:56.607 回答
2

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

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

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

a.total=(float)(a.precio*a.iva/100.0)
于 2013-06-06T11:47:15.687 回答