Mam dwa nieujemne długie. Mogą być duże, zbliżone do Long.MAX_VALUE. Chcę obliczyć procent z dwóch liczb.Przepełnienie - bezpieczny sposób obliczania wartości procentowej z dwóch liczb długich w Javie
Zwykle bym to zrobić:
long numerator = Long.MAX_VALUE/3 * 2;
long denominator = Long.MAX_VALUE;
int percentage = (int) (numerator * 100/denominator);
System.out.println("percentage = " + percentage);
To nie jest poprawne, jeśli licznik jest w dwóch rząd wielkości do Long.MAX_VALUE.
Co to jest poprawny, prosty i szybki sposób to zrobić?
Dlaczego "+ 0,5" na końcu? Myślę, że to dać lepsze zaokrąglenie ... ale 99,6 byłaby wtedy 100, który jest może nie tak dobre –
@SteveMcLeod: Tak, to zrobić z zaokrągleniem (patrz zaktualizowaną odpowiedź). Myślę, że zaokrąglanie do najbliższych jest rozsądną domyślą. – NPE
To rozwiązanie lubię. –