Java float无法正常运行

时间:2012-12-21 15:43:21

标签: java

  

可能重复:
  Why does (360 / 24) / 60 = 0 … in Java

我遇到了这个问题:

float rate= (115/100);

当我这样做时:

System.out.println(rate);

它给了我1.0 什么......问题是什么?

7 个答案:

答案 0 :(得分:9)

115和100都是整数,因此将返回一个整数。

尝试这样做:

float rate = (115f / 100f);

答案 1 :(得分:3)

您正在执行整数除法(提供整数结果),然后将其存储在浮点数中。

您需要在操作中至少使用一个浮点数才能使结果成为正确的类型:

float rate = 115f / 100;

答案 2 :(得分:2)

float rate= (115/100);

以下事项:

1)对115执行100的整数除法,得到值为1 2)将步骤1)的结果投射到浮子上。这产生值1.0

你想要的是这个:

float rate = 115.0/100;

或者更一般地说,你想要将你的分区中的一个分成一个浮点数,无论是通过施放(浮动)115/100还是通过将小数点附加到两个部分之一或者通过这样做{{ 1}}完全取决于你并产生相同的结果。

答案 3 :(得分:2)

为了使用整数执行浮点运算,您需要将至少一个操作数强制转换为float

示例:

int a = 115;
int b = 100;
float rate = ((float)a)/b;

答案 4 :(得分:1)

使用float rate= (float)(115.0/100);代替

答案 5 :(得分:1)

float rate = 115f / 100;

就足够了

答案 6 :(得分:0)

你遇到的问题是你的被除数和除数被声明为整数类型。

在数学中,只用remainder除以两个整数结果。这就是您分配给rate变量的内容。

所以要得到你想象的结果,剩下的是分数(有理数)。您的股息或除数必须以精确的类型声明。

精确定位两个已知类型float (Floating point)double (Double precision)

默认情况下,用Java代码编写的所有数字(纯粹主义者的整数文字)都是int(整数)类型。要更改它,您需要告诉编译器您要声明的数字应该以不同的类型表示。为此,您需要将后缀附加到整数文字。

Literals for decimal types:

  
    

float - f或F; 110f;

         

double - d或D 110D;

  

请注意,当您想要使用double,键入时,您也可以通过向文字添加小数分隔符来声明它:

double d = 2.;  要么 double d = 2.0;

我鼓励你使用double类型而不是float类型。双色型更适合大多数现代应用。使用float可能会导致意外结果,因为accuracy problem单点计算对结果的影响更大。很好地阅读这个“What Every Computer Scientist Should Know About Floating-Point Arithmetic”。 此外,在当前的CPU架构中,float和double都具有相同的性能特征。所以不需要牺牲准确性。

关于浮点类型的最后一点是,当我们编写财务应用程序时,应该使用它们。要在此问题上获得有效结果,您应始终使用[BigDecimal]