0 0

java 中double数减法问题5

代码如下:
 public class TestMath {
	public static void main(String[] args) {
		double aa = 87.5;
		double bb = 87.6;
		System.out.println(100-aa);
		System.out.println(100-bb);
	}
}

输出结果是:
12.5
12.400000000000006
有解释吗?
2009年10月16日 10:12

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

0 0

采纳的答案

http://www.iteye.com/problems/26677
JAVA解惑一书:

引用
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 值的最短表示就是你所
看到的打印出来的那个可恶的数字。
更一般地说,问题在于并不是所有的小数都可以用二进制浮点数来精确表示的。

2009年10月16日 10:17
0 0

double类型是近似值,100-aa中的100会自动类型转换成double才能与aa做操作,然后就出现近似值了

2009年10月16日 10:25
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 值的最短表示就是你所
看到的打印出来的那个可恶的数字。
更一般地说,问题在于并不是所有的小数都可以用二进制浮点数来精确表示的。

2009年10月16日 10:20

相关推荐

    JAVA复数的加减法程序

    下面将详细解释如何在Java中创建一个复数类以及实现复数的加减法功能。 首先,我们需要创建一个名为`Complex`的类来表示复数。这个类通常包含两个私有成员变量,分别存储实部和虚部: ```java public class ...

    Java 精确计算-double-float-String

    标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...

    java数学计算工具类 double精确的加法算法 double精确的减法算法

    java数学计算工具类 double精确的加法算法 double精确的减法算法 精确的乘法算法 对精确的除法运算,当发生除不尽的 保留小数、数值精度

    Java 基本类型double精度计算工具

    该工具用户进行double类型的精度计算,包含加法、减法、乘法、除法、精确点计算、小数点计算,限制小数点后数字

    Java BigDecimal和double示例及相关问题解析

    在 Java 中,浮点数的表示形式有多种,包括 float 和 double 等,但是这些类型在进行计算时会出现精度问题,而 BigDecimal 则可以解决这种问题。本文将主要介绍 Java 中的 BigDecimal 和 double 的示例及相关问题...

    Java:接口实现两数的加减乘除

    在本例中,我们将探讨如何通过设计一个接口来实现两数之间的加、减、乘、除操作。 首先,我们创建一个名为`Calculator`的接口,该接口定义了四个方法:`add()`, `subtract()`, `multiply()`, 和 `divide()`,分别...

    java基础--4.常用类-6.数字

    当我们进行数值运算时,Java支持基本的算术运算符:+(加法)、-(减法)、*(乘法)、/(除法)和%(取余)。对于整数除法,结果总是向下取整为整数,而浮点数除法则保留小数部分。注意,除以零会抛出Arithmetic...

    Java 加减乘除工具类(解决精度损失问题)

    * 提供精确的减法运算。 * * @param value1 * 减数 * @param value2 * 被减数 * @return 两个参数的差 */ public static Double sub(Number value1, Number value2) { BigDecimal b1 = new ...

    计算器java实现报告

    【Java实现简单计算器】 在Java语言中实现一个简单的计算器,主要涉及到基本的算术运算符和控制流程。...在后续的电话记费卡编程实验中,学生将进一步运用面向对象编程思想解决实际问题,巩固对Java语言的理解。

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    而`BigDecimal`类提供了对任意精度的十进制数的支持,确保了商业计算中的准确性。 ### `BigDecimal`的基本操作 1. **加法**:通过调用`add()`方法完成两个`BigDecimal`对象的相加。例如: ```java BigDecimal ...

    Java用BigDecimal解决double类型相减时可能存在的误差

    在Java编程语言中,`double`类型用于表示浮点数,但存在精度问题,尤其是在进行数学运算时。这是因为`double`是基于二进制浮点数标准(IEEE 754)来存储和计算的,这可能导致计算结果与预期的十进制值存在微小的差异...

    JSQ_java_

    在本项目"JSQ_java_"中,我们关注的是如何使用Java编程语言来创建一个简单的计算器,这个计算器能够执行基本的四则运算:加法、减法、乘法和除法。我们将深入探讨Java语言的基础知识,包括类的定义、方法的创建、...

    java.四则运算器

    在Java编程语言中,四则运算器是一种程序,它能够执行基本的数学操作,包括加法(+)、减法(-)、乘法(*)和除法(/)。这类程序通常用于教学目的,以帮助初学者理解如何在Java中处理数字和运算。在这个“java.四...

    Java中使用的常用数学类

    这是因为Java中的`float`和`double`类型基于二进制浮点表示,可能会导致精度损失,特别是在涉及货币或高精度计算的场景下。`BigDecimal`通过使用字符串或整数构造,可以确保数值的精确表示。 1. 创建`BigDecimal`...

    java 公式计算汇总,直接调用其方法即可进行运算

    - 减法:类似地,`-`运算符用于执行减法,对应的封装方法如`public double subtract(double a, double b)`。 - 乘法:`*`运算符用于乘法,对应的方法是`public double multiply(double a, double b)`。 - 除法:`...

    JAVA 简单的计算器代码

    - `public double squareRoot(double num)`,使用Java Math库中的`Math.sqrt()`方法来计算一个数的平方根。确保输入的数非负,因为负数没有实数平方根。 3. **用户交互**: - 使用`Scanner`类来获取用户输入。...

    Java计算器完整代码

    在Java中,加法、减法、乘法和除法操作可以通过使用基本的算术运算符来实现。例如,"+"用于加法,"-"用于减法,"*"用于乘法,"/"用于除法。在编写计算器程序时,我们需要将用户的输入解析成可执行的数学表达式。这...

    Java实现的浮点类的精确计算

    在Java中,浮点数(float和double)是基于IEEE 754标准的,它们使用二进制浮点表示法,这导致在进行除法、乘法、加法和减法等操作时可能会出现非预期的精度损失。例如,两个看似相等的浮点数在计算后可能因为舍入...

    实现了四则运算的java计算器源码

    在Java编程语言中,创建一个实现四则运算的计算器是一个常见的练习项目,它可以帮助开发者熟悉基本的输入输出处理、逻辑控制以及数学运算。本项目名为"MyCalculator",它旨在模仿Windows计算器的功能,不仅支持基本...

    Java练习题(试卷).

    从给定的文件信息中,我们可以提炼出一系列与Java编程语言相关的知识点,这些知识点涵盖了Java的基本语法、类和对象的概念、方法的重载与覆盖、继承、多态性以及异常处理等方面。以下是对这些知识点的详细说明: ##...

Global site tag (gtag.js) - Google Analytics