-
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个答案 按时间排序 按投票排序
-
采纳的答案
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
-
看类似问题
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中创建一个复数类以及实现复数的加减法功能。 首先,我们需要创建一个名为`Complex`的类来表示复数。这个类通常包含两个私有成员变量,分别存储实部和虚部: ```java public class ...
标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...
java数学计算工具类 double精确的加法算法 double精确的减法算法 精确的乘法算法 对精确的除法运算,当发生除不尽的 保留小数、数值精度
该工具用户进行double类型的精度计算,包含加法、减法、乘法、除法、精确点计算、小数点计算,限制小数点后数字
在 Java 中,浮点数的表示形式有多种,包括 float 和 double 等,但是这些类型在进行计算时会出现精度问题,而 BigDecimal 则可以解决这种问题。本文将主要介绍 Java 中的 BigDecimal 和 double 的示例及相关问题...
在本例中,我们将探讨如何通过设计一个接口来实现两数之间的加、减、乘、除操作。 首先,我们创建一个名为`Calculator`的接口,该接口定义了四个方法:`add()`, `subtract()`, `multiply()`, 和 `divide()`,分别...
当我们进行数值运算时,Java支持基本的算术运算符:+(加法)、-(减法)、*(乘法)、/(除法)和%(取余)。对于整数除法,结果总是向下取整为整数,而浮点数除法则保留小数部分。注意,除以零会抛出Arithmetic...
* 提供精确的减法运算。 * * @param value1 * 减数 * @param value2 * 被减数 * @return 两个参数的差 */ public static Double sub(Number value1, Number value2) { BigDecimal b1 = new ...
【Java实现简单计算器】 在Java语言中实现一个简单的计算器,主要涉及到基本的算术运算符和控制流程。...在后续的电话记费卡编程实验中,学生将进一步运用面向对象编程思想解决实际问题,巩固对Java语言的理解。
而`BigDecimal`类提供了对任意精度的十进制数的支持,确保了商业计算中的准确性。 ### `BigDecimal`的基本操作 1. **加法**:通过调用`add()`方法完成两个`BigDecimal`对象的相加。例如: ```java BigDecimal ...
在Java编程语言中,`double`类型用于表示浮点数,但存在精度问题,尤其是在进行数学运算时。这是因为`double`是基于二进制浮点数标准(IEEE 754)来存储和计算的,这可能导致计算结果与预期的十进制值存在微小的差异...
在本项目"JSQ_java_"中,我们关注的是如何使用Java编程语言来创建一个简单的计算器,这个计算器能够执行基本的四则运算:加法、减法、乘法和除法。我们将深入探讨Java语言的基础知识,包括类的定义、方法的创建、...
在Java编程语言中,四则运算器是一种程序,它能够执行基本的数学操作,包括加法(+)、减法(-)、乘法(*)和除法(/)。这类程序通常用于教学目的,以帮助初学者理解如何在Java中处理数字和运算。在这个“java.四...
这是因为Java中的`float`和`double`类型基于二进制浮点表示,可能会导致精度损失,特别是在涉及货币或高精度计算的场景下。`BigDecimal`通过使用字符串或整数构造,可以确保数值的精确表示。 1. 创建`BigDecimal`...
- 减法:类似地,`-`运算符用于执行减法,对应的封装方法如`public double subtract(double a, double b)`。 - 乘法:`*`运算符用于乘法,对应的方法是`public double multiply(double a, double b)`。 - 除法:`...
- `public double squareRoot(double num)`,使用Java Math库中的`Math.sqrt()`方法来计算一个数的平方根。确保输入的数非负,因为负数没有实数平方根。 3. **用户交互**: - 使用`Scanner`类来获取用户输入。...
在Java中,加法、减法、乘法和除法操作可以通过使用基本的算术运算符来实现。例如,"+"用于加法,"-"用于减法,"*"用于乘法,"/"用于除法。在编写计算器程序时,我们需要将用户的输入解析成可执行的数学表达式。这...
在Java中,浮点数(float和double)是基于IEEE 754标准的,它们使用二进制浮点表示法,这导致在进行除法、乘法、加法和减法等操作时可能会出现非预期的精度损失。例如,两个看似相等的浮点数在计算后可能因为舍入...
在Java编程语言中,创建一个实现四则运算的计算器是一个常见的练习项目,它可以帮助开发者熟悉基本的输入输出处理、逻辑控制以及数学运算。本项目名为"MyCalculator",它旨在模仿Windows计算器的功能,不仅支持基本...
从给定的文件信息中,我们可以提炼出一系列与Java编程语言相关的知识点,这些知识点涵盖了Java的基本语法、类和对象的概念、方法的重载与覆盖、继承、多态性以及异常处理等方面。以下是对这些知识点的详细说明: ##...