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

时间:2016-11-23 21:03:30

标签: java arrays fractions

所以,我有这个代码,它是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]);
    }
  }
}

1 个答案:

答案 0 :(得分:2)

这是因为您首先将整数存储到数组中。

考虑这一行:

ads[i] = (7 * i) / 40;

在右侧的表达式中,首先将i乘以7,然后将其除以40i是一个整数。所以,让我们说i == 1。然后,7 * i == 7,它仍然是一个整数。 740都是整数,因此当您评估7 / 40时,您会得到整数除法。整数除法总是向下舍入。当结果存储到ads[i]时,它会转换为double,但到那时它已被向下舍入。

尝试将此行更改为以下内容:

ads[i] = (7 * i) / 40.0;

这是有效的,因为40.0double,而不是int

在无关的新闻中,如果您使用double来实施RSA,那么您可能做错了什么。双打不是无限精确的,会搞砸你的结果。

相关问题