Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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中添加分数_Java - Fatal编程技术网

在Java中添加分数

在Java中添加分数,java,Java,我试着做一个简单的循环,把分数相加 double sum = 0; for (int i=1; i<=20; i++) { sum += 1/(i+2); } return sum; double sum=0; 对于(inti=1;i它正在进行整数除法,将其转换为双精度 sum += (double)1 / (i + 2); 它在做整数除法,把它加倍 sum += (double)1 / (i + 2); 由于i是整数,1/(i+2)也将生成整数。 您只需使用铸造来加倍,如下

我试着做一个简单的循环,把分数相加

double sum = 0;
for (int i=1; i<=20; i++) {
    sum += 1/(i+2);
}
return sum;
double sum=0;

对于(inti=1;i它正在进行整数除法,将其转换为双精度

sum += (double)1 / (i + 2);

它在做整数除法,把它加倍

sum += (double)1 / (i + 2);

由于
i
是整数,
1/(i+2)
也将生成整数。 您只需使用铸造来加倍,如下所示:

sum += 1.0d/(i+2);
当您写入
1.0d
(double)1
时,您将数字转换为double。
然后分数将产生双精度,并将正确分配给

因为
i
在整数中,
1/(i+2)
也将产生整数。 您只需使用铸造来加倍,如下所示:

sum += 1.0d/(i+2);
当您写入
1.0d
(double)1
时,您将数字转换为double。
然后分数将产生double,并将正确分配给
sum

最重要的是,使用浮点变量(如java中的float或double)总是很危险的,因为它们在二进制中是有限表示的。例如:

double a = 1.000001;
double b = 2.0000001;
System.out.println(a+b);
(2+3L) - expression result will be of long type
(2+2.1) - expression result will be of double type
(2.1f+2.0d) - expression result will be of double type
将打印3.00001099995

在代码中,表达式

1/(i+2)
被视为整数除法,1/3结果为0。表达式1和(i+2)都是整数。要获得更精确的结果,您应该知道任何运算结果都将以“最需要的精度”返回。也就是说,如果其中一个表达式的类型更精确,例如long、float、double,则结果值将是给定的最精确的类型。例如:

double a = 1.000001;
double b = 2.0000001;
System.out.println(a+b);
(2+3L) - expression result will be of long type
(2+2.1) - expression result will be of double type
(2.1f+2.0d) - expression result will be of double type
(L代表长型)

有几种方法可以在Java中表示浮点文字:

  • 浮点精度值可通过添加后缀“f”或“f”表示,即浮点a=1.2f
  • 双精度值可通过添加后缀“d”或“d”表示,即双精度a=2.3D
  • 除了后缀,还可以使用(float)或(double)运算符将值类型转换为所需类型,即float a=(float)1.2
  • 另一件重要的事情是不带后缀的值的默认表示。默认情况下,它是双精度的,非常典型:

    float a = 1.2;
    
    甚至不会编译,因为这样的分配将被视为有损转换,编译器需要程序员明确的意图(这通常是通过向值或转换值添加后缀来完成的)


  • 最重要的是,使用浮点变量(如java中的float或double)总是很危险的,因为它们在二进制中是有限表示的。例如:

    double a = 1.000001;
    double b = 2.0000001;
    System.out.println(a+b);
    
    (2+3L) - expression result will be of long type
    (2+2.1) - expression result will be of double type
    (2.1f+2.0d) - expression result will be of double type
    
    将打印3.00001099995

    在代码中,表达式

    1/(i+2)
    
    被视为整数除法,1/3结果为0。表达式1和(i+2)都是整数。要获得更精确的结果,您应该知道任何运算结果都将以“最需要的精度”返回。也就是说,如果其中一个表达式的类型更精确,例如long、float、double,则结果值将是给定的最精确的类型。例如:

    double a = 1.000001;
    double b = 2.0000001;
    System.out.println(a+b);
    
    (2+3L) - expression result will be of long type
    (2+2.1) - expression result will be of double type
    (2.1f+2.0d) - expression result will be of double type
    
    (L代表长型)

    有几种方法可以在Java中表示浮点文字:

  • 浮点精度值可通过添加后缀“f”或“f”表示,即浮点a=1.2f
  • 双精度值可通过添加后缀“d”或“d”表示,即双精度a=2.3D
  • 除了后缀,还可以使用(float)或(double)运算符将值类型转换为所需类型,即float a=(float)1.2
  • 另一件重要的事情是不带后缀的值的默认表示。默认情况下,它是双精度的,非常典型:

    float a = 1.2;
    
    甚至不会编译,因为这样的分配将被视为有损转换,编译器需要程序员明确的意图(这通常是通过向值或转换值添加后缀来完成的)

  • 你试过
    1D/(i+2)
    sum+=(double)1/(i+2);
    或者
    sum+=1.0d/(i+2);
    你试过
    1D/(i+2)
    或者
    sum+=1.0d/(i+2);