0 0

为什么 System.out.println(1-0.1*9);的答案5

System.out.println(1-0.1*9);
输出的结果按数学来算结果是:0.1  如果按从左到右来算也是8.1
但为什结果是0.09999999999999998  这是为什么了,这是什么运算????????????????
2011年8月11日 22:24

5个答案 按时间排序 按投票排序

0 0

采纳的答案

首先
2进制无法精确显示0.1

0.1 你用ieee的浮点数标准怎么表示? 后52个字节是小数,第一个字节是符号,后面11个字节是阶码。2的负几次方的和加到一起是0.1? 答案是没有。楼主试一下 2.0-0.5这样的,算出来就是精确的了。因为0.5是2的-1次方。0.75这样的 2(-1)+2(-2)都是可以精确表示的。。。。如果你想让2.0-0.1准确的话,用bigdecimal来做即可。


编译器在处理一个数据时,当一种类型数据无法用二进制数精确表示时,只能按照一种规则去找一个数代替(比如取最接近这个数的二进制数代替


如果想让他精确可以这样

System.out.printf("%.1f",2.0-1.1);  


或者

BigDecimal a = new BigDecimal("2.0").subtract(new BigDecimal("1.1"));
		System.out.println(a);

2011年8月11日 22:55
0 0

《Java解惑》这本书中有关于这个问题的解释,楼主可以自己研究看一下!
对于精度要求很高的运算不应使用float和double运算,应该使用BigDecimal!

2011年8月12日 10:43
0 0

能用int就不用float ,能用float就不用double。
例如:
System.out.println((float)(1-0.1*9));

2011年8月12日 09:17
0 0

http://www.iteye.com/problems/26677

public class Change{ 
public static void main(String args[]){ 
System.out.println(2.00 - 1.10); 
} 
} 
你可能会很天真地期望该程序能够打印出0.90,但是它如何才能知道你想要打 
印小数点后两位小数呢? 
如果你对在Double.toString 文档中所设定的将double 类型的值转换为字符串 
的规则有所了解,你就会知道该程序打印出来的小数,是足以将double 类型的 
值与最靠近它的临近值区分出来的最短的小数,它在小数点之前和之后都至少有 
一位。因此,看起来,该程序应该打印0.9 是合理的。 
这么分析可能显得很合理,但是并不正确。如果你运行该程序,你就会发现它打 
印的是0.8999999999999999 
问题在于1.1 这个数字不能被精确表示成为一个double,因此它被表示成为最 
接近它的double 值。该程序从2 中减去的就是这个值。遗憾的是,这个计算的 
结果并不是最接近0.9 的double 值。表示结果的double 值的最短表示就是你所 
看到的打印出来的那个可恶的数字。 
更一般地说,问题在于并不是所有的小数都可以用二进制浮点数来精确表示的。

2011年8月11日 22:40
0 0

因为十进制的有限浮点数,转换成二进制可能就不是有限小数了,可能变成了无限小数,而计算机存储一个浮点数的空间是固定的,这样就造成了不精确,在转换成十进制展现在我们面前的时候就是你看到的样子了

2011年8月11日 22:29

相关推荐

    jsch-0.1.42.jar及用java实现SFTP的例子

    System.out.println(file.getFilename()); } // 上传文件 FileInputStream fis = new FileInputStream("localfile"); sftpChannel.put(fis, "remotefile"); // 下载文件 FileOutputStream fos = new ...

    clickhouse-jdbc-0.1.50d.zip

    System.out.println(rs.getString("column1") + ", " + rs.getDouble("column2")); } ``` 5. 关闭资源:使用完毕后,记得关闭`ResultSet`、`Statement`和`Connection`以释放系统资源。 ```java rs.close(); ...

    可用的jsch-0.1.54.jar

    System.out.println(line); } channel.disconnect(); session.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码展示了如何使用JSCH连接到远程主机并执行`ls -l`命令。注意...

    (仅供参考)java期末考试样卷答案.doc

    } catch(NegativeArraySizeException e) { System.out.println("exception: 数组下标不能为负数。"); } } } - **选项:** A、编译通过,输出:此行将无法被执行! B、编译通过,输出:此行将无法被执行! exception: ...

    ojdbc8-12.2.0.1.zip

    System.out.println("Connected to the database!"); // ... 进行数据库操作 ... conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,`hostname`、`port`和`service_name...

    71道经典Android面试题和答案.doc

    System.out.println(b); } ``` - A. true - B. false - C. 1 - D. 0 - **解答**: 正确答案为B。 - **解释**: - 在这个布尔表达式中,所有的情况都不满足,因此最终的结果为`false`。 #### 5. 生命周期中的...

    nice java material

    System.out.println(formattedCurrency + ", " + formattedPercent); ``` ### 2. 方法传递 - **特点**:Java 中的方法调用采用的是值传递而非引用传递。 - **解释**:传递给方法的是实际参数的副本,而不是参数...

    JAVA实验项目.docx

    System.out.println(Arrays.toString(dest1)); } } ``` 2. **二维数组操作** - **示例程序** ```java public class MatrixOperations { public static void main(String[] args) { int[][] matrix = new ...

    SFTP例子和jsch-0.1.44.jar

    System.out.println(entry.getFilename()); } // 下载文件 sftpChannel.get("/remote/file.txt", "/local/directory/file.txt"); // 上传文件 sftpChannel.put("/local/file.txt", "/remote/directory/file....

    ojdbc-12.2.0.1.rar

    System.out.println("Connected to the database!"); // ... 进行数据库操作 ... conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` ojdbc-12.2.0.1驱动还支持高级特性,如: - 预编译...

    数据库驱动ojdbc6-11.2.0.1.jar

    System.out.println("Connected to the database!"); // 执行SQL语句 } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` 在这段代码中,我们首先加载Oracle驱动,然后...

    java逻辑50题

    System.out.println("Letters: " + letters + ", Digits: " + digits + ", Spaces: " + spaces + ", Others: " + others); ``` #### 题目8:数字累加 - **描述**:要求用户输入一个数字`a`和累加次数,计算`a + ...

    java循环思维训练

    System.out.println("第 " + month + " 个月的兔子总数为:" + current); ``` 2. **题目2:判断素数** - **问题描述**:判断101-200之间有多少个素数,并输出所有素数。 - **解决思路**:使用 `for` 循环遍历...

    ojdbc6-11.2.0.1.0.jar

    System.out.println("Connected to the database!"); // ... (执行数据库操作) conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` 在这个例子中,`your_...

    android面试题带答案

    System.out.println(b); } ``` - A. true - B. false - C. 1 - D. 0 **答案解析**: 根据Java布尔表达式的运算规则,`&&`和`||`都有短路特性。这里所有条件都不满足,因此最终结果为`false`。故正确答案是B。...

    移动互联应用技术1班_23403123_徐有成_实验一.docx

    System.out.println("猜一个1到100之间的数字。"); do { System.out.print("请输入你的猜测: "); guess = scanner.nextInt(); attempts++; if (guess ) { System.out.println("猜小了!"); } else if ...

    71道经典Android面试题和答案_重要知识点都包含了

    System.out.println(b); } ``` - **选项 A:** true - **选项 B:** false - **选项 C:** 1 - **选项 D:** 0 **答案:** B **知识点说明:** - 该布尔表达式中,所有条件均不成立。因此,最终的布尔值`b`为`false`。...

    java基础练习50题

    System.out.println("第 " + month + " 个月的兔子总数:" + currentMonth); int temp = currentMonth; currentMonth = nextMonth; nextMonth = temp + nextMonth; } } } ``` #### 素数判断(程序2) - **...

Global site tag (gtag.js) - Google Analytics