Tôi có hai thời gian không âm. Chúng có thể lớn, gần Long.MAX_VALUE. Tôi muốn tính tỷ lệ phần trăm từ hai số.Cách tràn an toàn để tính phần trăm từ hai lần trong Java
Thường thì tôi muốn làm điều này:
long numerator = Long.MAX_VALUE/3 * 2;
long denominator = Long.MAX_VALUE;
int percentage = (int) (numerator * 100/denominator);
System.out.println("percentage = " + percentage);
Đây không phải là chính xác nếu tử số là trong vòng hai thứ tự của độ lớn để Long.MAX_VALUE.
Cách chính xác, đơn giản và nhanh chóng là gì?
Tại sao '+ 0,5' ở cuối? Tôi đoán nó là để làm tròn tốt hơn ... nhưng 99,6 sau đó sẽ là 100 mà có lẽ không tốt như vậy –
@SteveMcLeod: Vâng, đó là để làm với làm tròn (xem câu trả lời được cập nhật). Tôi nghĩ rằng làm tròn đến gần nhất là một mặc định hợp lý. – NPE
Giải pháp này tôi thích. –