我正在开发一个能够像String一样评估String的数学解析器'5+b*sqrt(c^2)'.我正在使用ANTLR进行解析并取得良好进展.现在我摔倒在Java类上BigDecimal并且想:嘿,为什么不在这里考虑精度.
我的问题是Java API不提供BigDecimal类似的三角函数方法java.lang.Math.你知道是否有像Apache Commons这样的好的数学库可以解决这个问题吗?
其他问题是如何实现功率方法,以便我可以用BigDecimals 计算4.9 ^ 1.4 .这可能吗?
关于数值计算的书籍请求也受到赞赏.
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
这种情况发生的原因是什么?
可能重复:
java for-loop问题
为什么输出以下代码:
for (float j2 = 0.0f; j2 < 10.0f; j2+=0.1f) {
System.out.println(j2);
}
Run Code Online (Sandbox Code Playgroud)
这个:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
1.0000001
1.1000001
1.2000002
1.3000002
1.4000002
1.5000002
1.6000003
1.7000003
1.8000003
1.9000003
2.0000002
2.1000001
2.2
2.3
2.3999999
2.4999998
2.5999997
2.6999996
2.7999995
2.8999994
2.9999993
3.0999992
3.199999
3.299999
3.399999
3.4999988
3.5999987
3.6999986
3.7999985
3.8999984
3.9999983
4.0999985
4.1999984
4.2999983
4.399998
4.499998
4.599998
4.699998
4.799998
4.8999977
4.9999976
5.0999975
5.1999974
5.2999973
5.399997
5.499997
5.599997
5.699997
5.799997
5.8999968
5.9999967
6.0999966
6.1999965 …Run Code Online (Sandbox Code Playgroud)