在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);