请考虑以下代码:
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)
为什么会出现这些不准确之处?
如果我在C#中执行以下表达式:
double i = 10*0.69;
Run Code Online (Sandbox Code Playgroud)
i是:6.8999999999999995.为什么?
我理解像1/3这样的数字很难用二进制来表示,因为它有无限的重复小数位,但这不是0.69的情况.并且0.69可以很容易地用二进制表示,一个二进制数表示69,另一个表示小数位的位置.
我该如何解决这个问题?使用decimal类型?
double r = 11.631;
double theta = 21.4;
Run Code Online (Sandbox Code Playgroud)
在调试器中,这些显示为11.631000000000000和21.399999618530273.
我怎么能避免这个?
我需要在Java中进行一些浮点运算,如下面的代码所示:
public class TestMain {
private static Map<Integer, Double> ccc = new HashMap<Integer, Double>() {
{ put(1, 0.01); put(2, 0.02); put(3, 0.05); put(4, 0.1); put(6, 0.2);
put(10, 0.5); put(20, 1.0); put(30, 2.0); put(50, 5.0); put(100, 10.0);
}
};
Double increment(Double i, boolean up) {
Double inc = null;
while (inc == null) {
inc = ccc.get(i.intValue());
if (up)
--i;
else
++i;
}
return inc;
}
public static void main(String[] args) {
TestMain tt = new TestMain();
for (double i = …Run Code Online (Sandbox Code Playgroud) x = 4.2 - 0.1
Run Code Online (Sandbox Code Playgroud)
vb.net给出了4.1000000000000005
python给出的4.1000000000000005
Excel给出了4.1
calc calc给出4.1
这种情况发生的原因是什么?