我得到的JSpinner步長為 0.01,但似乎返回getValue()奇數(shù)值。舉個例子:它是 0.06,如果我增加它,它有時會顯示 0.06999999999999999 而不是 0.07。這會搞亂我的一些代碼,因?yàn)槲倚枰獙⑵涑艘?100(0.069999999999 * 100 將是 6 而不是 7!)。Math.round除了用于我的乘法之外,還有什么可能的方法來避免這個問題?spinnerU.setModel(new SpinnerNumberModel(0.0, 0.0, 30.0, 0.01));spinnerU.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { voltage = (double) spinnerU.getValue(); lbSpannung.setText(String.format(Locale.US, "%.2f", voltage)); System.out.println("volt: " + voltage + ", 100x: " + Math.round((voltage * 100))); slider.setValue((int) voltage * 100); }});output: volt: 0.08, 100x: 8volt: 0.09, 100x: 9volt: 0.09999999999999999, 100x: 10volt: 0.1, 100x: 10
1 回答

慕尼黑5688855
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個贊
問題不在于 JSpinner。
您正在使用雙作為模型。double 類型不能存儲任意精度的值。事實(shí)上它根本無法存儲某些值。
如果你想存儲精確的值,你需要一種整數(shù)類型。
添加回答
舉報(bào)
0/150
提交
取消