Tôi đang cố tính phần trăm "yếu tố". Tức là, được đưa ra 20%, chuyển đổi nó thành 0,2 (ý định của tôi là sau đó nhân giá trị bằng cách đó và nhận 20% giá trị).Java, BigDecimal. Các vấn đề với sự phân chia
Dù sao, câu hỏi có liên quan với đoạn mã này:
public static void main(String[] args) {
int roundingMode = BigDecimal.ROUND_FLOOR;
BigDecimal hundred = new BigDecimal("100");
BigDecimal percentageFactor = null;
BigDecimal percentage = new BigDecimal("20");
BigDecimal value = new BigDecimal("500");
percentageFactor = percentage.divide(hundred, roundingMode);
float f = percentage.floatValue()/hundred.floatValue();
f = value.floatValue() * f;
BigDecimal aux = value.multiply(percentageFactor);
System.out.println("factor:"+percentageFactor.toString());
System.out.println("final falue:"+aux.toString());
System.out.println("Float Value:"+f);
}
Tôi mong chờ kết quả của điều này là một cái gì đó như:
factor: 0.2
final value: 100
float value: 100
nhưng thay vì percentage.divide(hundred, roundingMode);
đang trở lại bằng không, một do đó tôi nhận được:
factor:0
final falue:0
Float Value:100.0
Tôi đang làm gì sai? Làm thế nào tôi có thể chia hai số thập phân lớn đúng cách?
Nhân tiện, tôi đang sử dụng BigDecimal
vì tôi sẽ tính phần trăm tiền tệ, vì vậy tôi muốn kiểm soát việc làm tròn.
Nếu bạn muốn kiểm soát làm tròn, bạn không nên sử dụng các số dấu phẩy động, không nổi hay tăng gấp đôi. Gắn bó với BigDecimal. – markusk
Thường chỉ kết quả cuối cùng cần phải có kiểm soát làm tròn, vì vậy bạn đã sử dụng BigDecimal chỉ để làm tròn kết quả (hoặc một phương thức trợ giúp đơn giản) Điều này có thể đơn giản và nhanh hơn đáng kể. –