首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSpinner -奇数步长

JSpinner -奇数步长
EN

Stack Overflow用户
提问于 2019-10-27 18:47:57
回答 1查看 43关注 0票数 0

我得到了一个步长为0.01的JSpinner,但似乎getValue()返回了奇数值。

例如:它是0.06,如果我增加它,它有时会显示0.06999999999999999,而不是0.07。

这会弄乱我的一些代码,因为我需要将它乘以100 (0.069999999999 * 100将是6而不是7!)。

除了使用Math.round进行乘法之外,还有什么可能的方法来避免这个问题吗?

代码语言:javascript
复制
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: 8
volt: 0.09, 100x: 9
volt: 0.09999999999999999, 100x: 10
volt: 0.1, 100x: 10 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-27 18:53:32

问题不在JSpinner。

您正在使用一个替身as模型。类型double不能以任意精度存储值。事实上,它根本不能存储某些值。

您可以在IT here中读取更多浮点数。

如果你想存储精确值,你需要一种整型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58578671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档