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之间 为什么会这样?
答案 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)
i
和100
都是整数,因此将返回一个整数。您正在划分整数,这意味着您正在使用整数除法。
在整数除法中,结果的小数部分被丢弃。
尝试这样做:
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)
i
和100
的数据类型在表达式中是整数。整数除法(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; //隐蔽我漂浮和分裂