java - 计算双数据类型中不需要的部分

标签 java double

<分区>

我对数据类型有一个奇怪的问题:double。

这是我的代码:

public class Example {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double a = 1.0;
        for(int i =0; i<10;i++){
            System.out.println("Number => " + a );
            a += 0.1;
        }
    }

}

输出应该是:

Number => 1.0
Number => 1.1
Number => 1.2
Number => 1.3
Number => 1.4
Number => 1.5
Number => 1.6
Number => 1.7
Number => 1.8
Number => 1.9

但是,此代码示例的结果是:

Number => 1.0
Number => 1.1
Number => 1.2000000000000002
Number => 1.3000000000000003
Number => 1.4000000000000004
Number => 1.5000000000000004
Number => 1.6000000000000005
Number => 1.7000000000000006
Number => 1.8000000000000007
Number => 1.9000000000000008

我使用eclipse 来编译这个代码块。我在 netbeans 上试过了,但没有任何改变。

它应该如何发生?有什么想法吗?

问候

最佳答案

这并不容易。我会使用 Commons-Math

for (int i = 0; i < 10; i++) {
    a = Precision.round(a, 1);   // <- round to 1 digit after decimal point
    ...

我认为唯一的 Java SE 替代方案是

a = Double.parseDouble(String.format(Locale.US, "%.1f", a));

关于java - 计算双数据类型中不需要的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16838454/

相关文章:

java - 每次用户保存库时保存到新的 txt 文件

java - 通过 Try 和 Catch block 检查字符串和 Null 异常

java - 尝试创建 double 变量类型的数组时出错

java - ArrayList 选择双变量时遇到麻烦 'Method call expected'

java - Spring Boot Keycloak - 每个请求验证三次

java - 如何将现有源文件导入 JDeveloper?

java - 用java创建一个Logger库

java - 如何扩展Spring MVC Controller 注解?

c++ - 浮点运算的最佳实践

c# - 合格双倍显示不正常