Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么存储在double中的分数在输出到屏幕时变成整数?_Java_Arrays_Fractions - Fatal编程技术网

Java 为什么存储在double中的分数在输出到屏幕时变成整数?

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

所以,我有这段代码,它是RSA加密机(当前数学类)的开始。现在我还处于开始阶段,我注意到当我尝试制作一系列双打时,它们都以整数的形式出现在屏幕上,这是怎么回事

正如您在代码中所看到的,我将7的倍数除以40,结果应该是分数(例如7/14=0.175),而不是0.0。 帮助


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;