Java 为什么存储在double中的分数在输出到屏幕时变成整数?
所以,我有这段代码,它是RSA加密机(当前数学类)的开始。现在我还处于开始阶段,我注意到当我尝试制作一系列双打时,它们都以整数的形式出现在屏幕上,这是怎么回事 正如您在代码中所看到的,我将7的倍数除以40,结果应该是分数(例如7/14=0.175),而不是0.0。 帮助Java 为什么存储在double中的分数在输出到屏幕时变成整数?,java,arrays,fractions,Java,Arrays,Fractions,所以,我有这段代码,它是RSA加密机(当前数学类)的开始。现在我还处于开始阶段,我注意到当我尝试制作一系列双打时,它们都以整数的形式出现在屏幕上,这是怎么回事 正如您在代码中所看到的,我将7的倍数除以40,结果应该是分数(例如7/14=0.175),而不是0.0。 帮助 import java.util.*; 公共类加密{ 静态双精度[]ads=新双精度[200]; 公共静态void main(字符串参数[]){ 对于(int i=0;i
import java.util.*;
公共类加密{
静态双精度[]ads=新双精度[200];
公共静态void main(字符串参数[]){
对于(int i=0;i<200;i++){
ads[i]=(7*i)/40;
}
for(int i=0;i
这是因为您首先要在数组中存储一个整数
以这一行为例:
ads[i] = (7 * i) / 40;
在右侧的表达式中,首先将i
乘以7
,然后除以40
i
是一个整数。那么,让我们假设i==1
。然后,7*i==7
,它仍然是一个整数。7
和40
都是整数,因此当您计算7/40
时,将得到整数除法。整数除法总是向下舍入。当结果被存储到ads[i]中时,它被转换成一个双精度的,但到那时它已经被向下舍入了
尝试将此行更改为以下内容:
ads[i] = (7 * i) / 40.0;
这是因为40.0
是double
,而不是int
在不相关的新闻中,如果您使用double
来实现RSA,您可能做错了什么。双倍不是无限精确的,它会把结果搞砸。用40.0
替换40
。将一个int
除以一个int
只能得到另一个int
。这是因为将int除以int,将40除以40.0。(或将7除以7.0;或将i
除以(double)i
。使除法的至少一个操作数加倍的任何操作数)。
ads[i] = (7 * i) / 40.0;