我有两个非负长.它们可能很大,接近Long.MAX_VALUE.我想从两个数字中计算一个百分比.
通常我会这样做:
long numerator = Long.MAX_VALUE / 3 * 2;
long denominator = Long.MAX_VALUE;
int percentage = (int) (numerator * 100 / denominator);
System.out.println("percentage = " + percentage);
Run Code Online (Sandbox Code Playgroud)
如果分子在Long.MAX_VALUE的两个数量级内,则这是不正确的.
什么是正确,简单,快速的方法?
NPE*_*NPE 14
我用的是:
int percentage = (int)(numerator * 100.0 / denominator + 0.5);
Run Code Online (Sandbox Code Playgroud)
该100.0部队从该点浮点数学运算,并+ 0.5四舍五入为最接近的整数,而不是截断.
int percentage = (int) (0.5d + ((double)numerator/(double)denominator) * 100);
Run Code Online (Sandbox Code Playgroud)
如果你将a除以a long,long你会得到一个long,这对百分比来说并不好.