我有一个双重数组,第一个数组中包含某些城市的人口,第二个数组中包含这些城市的国家人口。
double[][] population = new double[][]{
{24153000,18590000,18000000,14657000,14543000,13617000,13197596,12877000,12784000,12400000,12038000,
11908000,11548000,11035000,10608000,10355000,10290000,10152000,10125000,9752000},
{1384688986,1384688986,207862518,81257239,162951560,126168156,143964513,105920222,
1384688986,1296834042,207652865,1384688986,1384688986,1296834042,1384688986,207862518,50791919,1384688986,86300000,31773839
}
我试图找到居住在城市中的某个国家/地区的人口百分比。因此,我有一个for循环,该循环将某个索引处的数组1除以数组2中的等效索引。循环体显示
double percent= (population[0][i]*100f)/population[1][i];
但是我一直在得到整数除法。例如,为了划分两个数组的第一个元素,我得到2而不是1.744。
有人可以告诉我为什么会这样吗?即使我除以双精度数而不是整数,也只能得到整数。
编辑:这是循环的其余部分。还有一些额外的东西,例如我只应该打印出人口超过1000万的城市。还有些格式。
for (int i = 0; i < population[1].length; i++) {
if (population[0][i] > 10000000) {
double percent = (population[0][i]*100f)/population[1][i];
System.out.printf("%10.0f", percent);
System.out.println();
}
答案 0 :(得分:1)
这是您打印出来的方式。试试
System.out.println(percent);
或查看格式化程序的文档
https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
答案 1 :(得分:1)
问题是您打印号码的方式:
System.out.printf("%10.0f", percent);
格式说明符"%10.0f"
说:
这将四舍五入到最接近的整数。
替代品:
println(percent)
...,它将以最高的精确度显示数字...而已。注意:在强制表达式使用浮点计算时,建议使用100.0
(类型double
)而不是100f
(类型float
)。最好以double
的精度进行计算,尤其是要将结果分配给double
时。
在这种情况下,由于population
已经是浮点,因此您没有强制使用浮点。但是:
最好使用100.0
来向读者表明,计算是以双精度进行的。
float
文字可能不如相应的double
文字那么精确...尽管在这种情况下不是这样。