所以,我有这个代码,它是RSA加密器(当前数学类)的开头。现在我还处于起步阶段,我注意到当我尝试制作一系列双打时,它们都会以整数形式出现在屏幕上,这里发生了什么?
正如您在代码中所看到的,我将7的倍数除以40,它应该作为分数(例如7/14 = 0.175),而是0.0。 帮助
import java.util.*;
public class Encryption {
static double[] ads = new double[200];
public static void main(String args[]){
for(int i = 0; i < 200; i++){
ads[i] = (7 * i) / 40;
}
for(int i = 0; i < ads.length; i++){
System.out.println(ads[i]);
}
}
}
答案 0 :(得分:2)
这是因为您首先将整数存储到数组中。
考虑这一行:
ads[i] = (7 * i) / 40;
在右侧的表达式中,首先将i
乘以7
,然后将其除以40
。 i
是一个整数。所以,让我们说i == 1
。然后,7 * i == 7
,它仍然是一个整数。 7
和40
都是整数,因此当您评估7 / 40
时,您会得到整数除法。整数除法总是向下舍入。当结果存储到ads[i]
时,它会转换为double
,但到那时它已被向下舍入。
尝试将此行更改为以下内容:
ads[i] = (7 * i) / 40.0;
这是有效的,因为40.0
是double
,而不是int
。
在无关的新闻中,如果您使用double
来实施RSA,那么您可能做错了什么。双打不是无限精确的,会搞砸你的结果。