我正在为一项校内项目创建一个RPN计算器,但是在求模运算符方面遇到了问题。由于我们使用的是double数据类型,所以模运算符无法用于浮点数。例如,0.5 % 0.3 应该返回0.2,但我得到了除零异常的结果。
指令中提到要使用fmod()。我已经在包括javadoc在内的所有地方寻找了fmod(),但是我找不到它。我开始觉得这可能是我需要创建的方法?
编辑:嗯,奇怪。我刚才又输入了那些数字,似乎也能正常工作...但以防万一,我需要注意在使用浮点类型时使用Java中的mod运算符吗?我知道在C++中不能做这样的事情(我想)。
指令中提到要使用fmod()。我已经在包括javadoc在内的所有地方寻找了fmod(),但是我找不到它。我开始觉得这可能是我需要创建的方法?
编辑:嗯,奇怪。我刚才又输入了那些数字,似乎也能正常工作...但以防万一,我需要注意在使用浮点类型时使用Java中的mod运算符吗?我知道在C++中不能做这样的事情(我想)。
1.0 % 0.1
返回了0.09999999999999995
,这是因为舍入误差导致的结果。有什么办法可以纠正这个问题(可能需要使用epsilon值)? - GroostavString.format("%.8f",1.0%0.1)
returns0.10000000
- Anarchofascist0.1
无法表示为双精度浮点数,因此结果是最接近可表示的双精度浮点数。 - augurar1.0 % 0.1
,但实际上你做的是1.0 % 0.10000000000000000555111512...
,所以如果你增加那个 1.0,答案将会越来越远离 0.1。 - Mark Jeronimus