请考虑以下代码:
0.1 + 0.2 == 0.3 -> false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2 -> 0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
为什么会出现这些不准确之处?
这段代码没有像我想象的那样工作.
a=-1;
b=0.1;
for(i=0;i<=20;i++){
System.out.println(i + ". x= " + a);
a=a+b;
}
Run Code Online (Sandbox Code Playgroud)
在控制台上我应该看到:
0. x= -1.0
1. x= -0.9
2. x= -0.8
3. x= -0.7
4. x= -0.6
5. x= -0.5
6. x= -0.4
7. x= -0.3
Run Code Online (Sandbox Code Playgroud)
...等等
但这是发生的事情:
0. x= -1.0
1. x= -0.9
2. x= -0.8
3. x= -0.7000000000000001
4. x= -0.6000000000000001
5. x= -0.5000000000000001
6. x= -0.40000000000000013
7. x= -0.30000000000000016
8. x= -0.20000000000000015
9. x= -0.10000000000000014
10. x= -1.3877787807814457E-16
11. x= 0.09999999999999987
12. x= 0.19999999999999987
13. …Run Code Online (Sandbox Code Playgroud) 我正在制作直方图课程,我遇到了一个奇怪的问题.
以下是该类的基础知识,有更多方法,但它们与问题无关.
private int[] counters;
private int numCounters;
private double min, max, width;
public Histogram(double botRange, double topRange, int numCounters) {
counters = new int[numCounters];
this.numCounters = numCounters;
min = botRange;
max = topRange;
width = (max - min) / (double) numCounters;
}
public void plotFrequency() {
for (int i = 0; i < counters.length; i++) {
writeLimit(i * width, (i + 1) * width);
System.out.println(counters[i]);
}
}
private void writeLimit(double start, double end) {
System.out.print(start …Run Code Online (Sandbox Code Playgroud) 我想创建一个间隔为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)
我该怎么办 ?
在Flash中创建一个新的AS3文档,粘贴以下代码并运行它:
var a:Number=0;
trace(a) // 0
a+=0.3;
trace(a) // 0.3
a+=0.3;
trace(a) // 0.6
a+=0.3;
trace(a) // 0.8999999999999999
a+=0.3;
trace(a) // 1.2
a+=0.3;
trace(a) // 1.5
a+=0.3;
trace(a) // 1.8
a+=0.3;
trace(a) // 2.1
a+=0.3;
// ^ This is the output. Notice the inaccuracy starting from 0.9 / 0.89
Run Code Online (Sandbox Code Playgroud)
为什么错误?我只是做一个普通的高分辨率加法.
任何解决方法?
可能重复:
Java程序中奇怪的浮点行为
我在Java中遇到了这种奇怪的现象。在Java程序中尝试以下语句:
System.out.print(4.0-3.1);
Run Code Online (Sandbox Code Playgroud)
输出将是 0.8999999
为什么会这样?以及如何更改?
我目前正在用java编写计算器程序.这是我的第一个java程序,我习惯于c ++.
我注意到java中的双打完全不像c ++中的双打.在java和c ++
4.1*3
中尝试这个/ .1
它应该是
12.3然后123,并且c ++给出了这个结果但java给出了
12.299999999999999和122.99999999999999
我怎么能像在c ++中使用双打一样进行数学运算,我知道你在程序中使用12.299999999999999的任何东西都不会与12.3相比没有区别,但是当用户正在阅读数字时,这非常难看.我已经查看了BigDecimal类,但我无法对该类执行trig和logarithms等等