为什么我没有得到理想的结果?

时间:2016-01-28 06:22:19

标签: java

for(int i=0;i<100;i++)
{
    float val=(i/100);
    System.out.println(val);                    
}

输出:

0.0
0.0
0.0....

期望的输出:

0.0
0.1
0.2
0.3...

我正在尝试将百分比值转换为0到100之间 为什么会这样?

8 个答案:

答案 0 :(得分:2)

i&amp; 100都是整数值,它们除法的结果也是整数。因此,您需要将其中至少一个(除法操作数)转换为float,&amp;除以 10

for(int i=0;i<10;i++) // Change the loop step to 10 also
{
    float val = (float)i / 10; // or float val = i / (float)10;
    System.out.println(val);
}

输出:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9

答案 1 :(得分:1)

i100都是整数,因此将返回一个整数。您正在划分整数,这意味着您正在使用整数除法。

在整数除法中,结果的小数部分被丢弃。

尝试这样做:

float val = (i / 100f);

答案 2 :(得分:1)

您的问题是编译器对2个整数执行整数除法,然后将结果(0)转换为浮点数。要避免这种情况,请向分部的任一侧添加显式强制转换。这将提前投射并执行浮点除法。

float val = (float) i / 100;

// output
0.0
0.01
0.02
0.03
...

答案 3 :(得分:0)

尝试将更改改为:

float val=(i/100f);

截至目前,您正在将int除以返回int的int,因此您无法获得所需的结果。

答案 4 :(得分:0)

您需要将float除以float,否则int / int只需提供int,然后将其分配给float

float val=(Float.valueOf(i)/100);

答案 5 :(得分:0)

原因是java推广规则。 在表达式中,(i / 100)都是整数,因此结果是整数。 99/100是o.99,当转换为int时,它变为0。

根据Java语言规范(Numberic Promotion 5.6

Numeric  promotion  (§5.6)  brings  the  operands  of  a  numeric  operator  to  a common type so that an operation can be performed.

When an operator applies binary numeric promotion to a pair of operands, each of which must denote a value that is convertible to a numeric type, the following rules apply, in order:

1. If any operand is of a reference type, it is subjected to unboxing conversion
    (§5.1.8).

2. Widening primitive conversion (§5.1.2) is applied to convert either or both
    operands as specified by the following rules:
    • If either operand is of type double, the other is converted to double.
    • Otherwise, if either operand is of type float, the other is converted to float.
    • Otherwise, if either operand is of type long, the other is converted to long.
    • Otherwise, both operands are converted to type int.

答案 6 :(得分:0)

i100的数据类型在表达式中是整数。整数除法(int/int)计算为Math.floor(int/int)(等效运算),在您的情况下它总是返回零。

尝试使用以下表达式之一将至少一个操作数转换为float或double。

float val=(float)i/100或    float val=i/(float)100或    float val=i/100.0f

答案 7 :(得分:0)

这是因为你正在进行整数除法。

除以double或float,它将起作用:

双刻度=(n / 1024.0)* 255;

或者,如果你想把它作为一个浮点数,

浮动比例=(n / 1024.0f)* 255;

float val =(float)i / 100; //隐蔽我漂浮和分裂