简体   繁体   English

大十进制除法

[英]BigDecimal division

I'm trying to use BigDecimal to calculate the GST tax rate. 我正在尝试使用BigDecimal来计算GST税率。

The tax calculation is supposed to be 1/11 * item price. 税收计算应为1/11 *项目价格。

So I thought I should probably use the BigDecimal to give the most accurate representation. 所以我认为我应该使用BigDecimal来给出最准确的表示。 But for some reason the rate is always calculated to zero. 但是由于某种原因,费率总是计算为零。

this is what I've tried: 这是我尝试过的:

BigDecimal TAX_RATE = new BigDecimal("1")
    .divide(new BigDecimal("11"), BigDecimal.ROUND_HALF_UP);
BigDecimal bd = new BigDecimal("10").multiply(TAX_RATE);
// gives 0

Does anyone know why? 有人知道为什么吗?

Try 尝试

BigDecimal TAX_RATE = new BigDecimal("1").divide(new BigDecimal("11"), 500, BigDecimal.ROUND_HALF_UP);

Second argument specifies precision. 第二个参数指定精度。 It's zero by default, so you end up rounding everything to an int. 默认情况下为零,因此最终将所有内容四舍五入为一个整型。

In your case TAX_RATE equals 0 because of BigDecimal.ROUND_HALF_UP . 在您的情况下,由于BigDecimal.ROUND_HALF_UP TAX_RATE等于0。 See http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#ROUND_HALF_UP 参见http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#ROUND_HALF_UP

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM