`

计算机精度问题(Double)

阅读更多

计算机精度问题(Double)

 

1.1.我们用计算器10-9.88应该等于0.12,但是如果在计算机里,两个Double相减为0.11999999999999922

System.out.println(10-9.88);//输出0.11999999999999922

1.2.如何解决Double相减精度问题,想法是:先乘1000 取整,然后再除1000取整(100也可以,看你的精度范围)

System.out.println((10*1000-(int)(9.88*1000))/1000d); //输出0.12,正确

 

2.1我们用计算器20*0.988应该等于19.76,但是如果在计算机里,两个Double相减为19.759999999999998

System.out.println(20*0.988); //输出:19.759999999999998

2.2.如何解决

System.out.println((20*(int)(0.988*1000))/1000d);//输出19.76,计算正确

 

###.精度问题,一般体现的除法、减法上,乘、加一般没问题

 

 

###我的应用(详细见:DoubleConvert.zip)

System.out.println(5-4.8);//double精度问题
System.out.println((5*1000-(4.8234*1000))/1000d);//不加int,不理想
System.out.println((5*1000-(int)(4.8234*1000))/1000d);//double精度解决办法
 

 

 

 

 

分享到:
评论
1 楼 daywbdb 2012-07-05  
为什么大家这么多都喜欢用这种方法来计算,而不用BigDecimal来计算呢?

相关推荐

    double类型精度丢失;double转换到64位整数

    1. **浮点数存储**: 浮点数在计算机内部是用二进制表示的,不是所有的小数都能精确地表示为有限的二进制小数,这就导致了精度丢失。例如,1/10(0.1)在二进制下是无限循环的,无法完全精确地存储。 2. **运算过程*...

    C#中处理多位小数精度的精度问题

    在C#编程中,处理多位小数的精度问题是一个常见的挑战。这主要涉及到浮点数和定点数的数据类型,以及它们在数学运算中可能出现的精度损失。本文将深入探讨这个问题,并提供解决方案。 首先,让我们理解为何会出现...

    float double精度的详细解释

    ### float与double精度详解 #### 一、浮点数的基础概念 在计算机科学中,`float` 和 `double` 是两种常用的浮点数类型,它们主要用于处理实数运算。这两种类型的区别主要体现在精度和范围上。 #### 二、浮点数的...

    java_double_精度

    Java 中的双精度浮点数(double)类型在进行运算时经常出现精度丢失的问题,这是由于双精度浮点数在计算机内部的存储方式所致。双精度浮点数使用 64 位二进制数来存储小数,然而这种存储方式会导致某些小数无法精确...

    关于浮点数的精度问题

    浮点数的精度问题是由于计算机对浮点数的存储方式和表示方法所致。 IEEE754 的浮点数存储格式对浮点数的表示方法进行了规定。浮点数可以分为三部分:符号位、指数位和尾数位。符号位用于表示浮点数的正负号,指数...

    double 计算过程出现的误差

    尽管`double`类型的精度较高,但在某些情况下仍然会出现精度损失的问题,尤其是在累加等连续计算操作中更为明显。 #### 二、C#中的`double`计算误差示例 ```csharp double d = 0.0; for (int i = 0; i ; i++) { d...

    Java中double类型下出现精度计算错误情况下出力方法

    这个问题其实不是JAVA的bug,因为计算机本身是二进制的,而浮点数实际上只是个近似值,所以从二进制转化为十进制浮点数时,精度容易丢失,导致精度下降。  要保证精度就要使用BigDecimal类,而且不能直接从double...

    浮点数精度问题解答——浮点数

    浮点数精度问题在计算机科学中是一个至关重要的概念,尤其对于进行数值计算的开发者来说,理解和掌握浮点数的表示和精度误差至关重要。本文将详细阐述IEEE 754标准,这一标准对浮点数的表示和计算进行了规范,旨在...

    8位16进制与浮点double的转换工具

    "8位16进制与浮点double的转换工具"是一个专为理解和操作二进制数据而设计的实用程序,尤其关注IEEE 754标准,这是现代计算机系统中浮点数的标准表示方式。以下是对这个工具和相关知识点的详细解释: 浮点数表示法...

    float和double

    浮点数类型float和double是编程语言中最常用的数值类型,但是它们的精度和范围却是程序员需要注意的重要问题。本文将详细解释float和double的范围和精度,及其在商业计算中的应用问题和解决方法。 1. 范围 float和...

    float_double存储问题

    "float_double存储问题" float 和 double 是 C 语言和 C# 语言中最常用的浮点类型,它们分别使用单精度和双精度来存储浮点数据。 float 数据占用 32bit,而 double 数据占用 64bit。 在 IEEE 的规范下,float ...

    double数据类型

    在计算机科学领域,`double`数据类型是一种用于存储实数的数据结构,尤其适用于需要高精度数值计算的应用场景。然而,由于其内部实现方式,即便是像C或C++这样的语言中所采用的标准`double`类型也存在一定的局限性。...

    浮点数(单精度浮点数,双精度浮点数)

    在 C++ 中,浮点数有六种:float(单精度)、unsigned float(单精度无符号)、double(双精度)、unsigned double(双精度无符号)、long double(高双精度)和 unsigned long double(高双精度无符号)。...

    float、double类型介绍.zip

    double是双精度浮点数,在同一标准下占据64位,包含1位符号位、11位指数位和52位尾数。因此,double具有更高的精度,可以表示大约15到16位十进制的小数。在大多数计算中,double是默认的浮点类型,因为它提供了足够...

    单双精度转换工具.rar

    "单双精度转换工具"是一款专为处理浮点数精度问题而设计的实用软件,它可以帮助用户方便地在单精度(float)和双精度(double)浮点数之间进行转换。 单精度浮点数是IEEE 754标准定义的一种32位数据格式,它能提供...

    64位16进制字符串to双精度浮点数_labview_64位浮点_双精度

    双精度浮点数(Double Precision)是一种浮点数类型,它使用64位(8字节)存储一个数值,可以提供非常高的精度和广泛的数值范围。在二进制表示中,64位双精度浮点数遵循IEEE 754标准,其结构分为三个部分:符号位(1...

    基于C++浮点数(float、double)类型数据比较与转换的详解

    当我们使用`atof()`函数将字符串转换为`float`或`double`时,可能会遇到精度损失问题。例如,将字符串"8.2"转换为`float`时,结果为8.1999998,而转换为`double`时,结果为8.1999999999999993。这是因为浮点数在...

    double-conversion.zip

    双精度浮点数是一种在计算机科学中用于存储高精度和大范围数值的数据类型。按照IEEE 754标准,它包含了64位(8字节)的信息,其中包括1位符号位、11位指数位和52位尾数,能表示大约15到16位小数的精度。 double-...

    S7-200SMART 双精度浮点型数据转换为单精度浮点型的方法.pdf

    双精度和单精度浮点数在计算机中以二进制形式表示,双精度占用64位(8字节),而单精度占用32位(4字节)。在S7-200 SMART PLC中,这种数据转换需要通过特定的方法实现。 本文件详细介绍了如何在S7-200 SMART PLC中...

Global site tag (gtag.js) - Google Analytics