我想创建一个间隔为0.2的值数组我使用了代码:
public class TrialCode {
public static void main(String[] args) {
float a = -1.0f, b = 0.2f;
for (int i = 0; i <10; i++) {
a = a + b;
System.out.println(a);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我得到的输出是:
-0.8
-0.6
-0.40000004
-0.20000003
-2.9802322E-8
0.19999997
0.39999998
0.59999996
0.79999995
0.99999994
Run Code Online (Sandbox Code Playgroud)
而我想要的输出是
-0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0
Run Code Online (Sandbox Code Playgroud)
我该怎么办 ?
浮点数只能达到一定的精度.对于float是6-7显著数字编号,double它是15-16显著数字.并且由于二进制表示,像0.1这样的简单小数部分无法准确表示.
您可以对输出进行舍入以获得所需的结果:
System.out.printf("%.1f", a);
Run Code Online (Sandbox Code Playgroud)
如果您不想要浮点运算,则不要使用浮点类型.Float并且Double不是NumberJava核心库中唯一的非整数.你在做什么要求BigDecimal.
import java.math.BigDecimal;
public class TrialCode {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("-1.0");
BigDecimal b = new BigDecimal("0.2");
for (int i = 0; i < 10; i++) {
a = a.add(b);
System.out.println(a);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |