`

ieee754的浮点数问题

阅读更多

ieee754的浮点数问题

 

 

我们在用java的浮点类型时候,有时会碰到莫名的精度问题。

例如2.02,2.04乘以100是对的,但是2.01乘以100就会变成200.9999...

这是因为ieee754标准导致的,实际上浮点数运算本来存在一个精度问题,

2进制标准的算法来实现的时候就有可能碰见自然中很明显的精确结果变成了近似结果

 

错误例子:

double a = 2.01;

System.out.println(a * 100);

System.out.println(a/10);

 

分别打出:

200.99999999999997

0.20099999999999998

 

比较主流的方法是用BigDecimal来解决此问题:

double a = 2.01;

System.out.println(BigDecimal.valueOf(a).multiply(BigDecimal.valueOf(100)));

System.out.println(BigDecimal.valueOf(a).divide(BigDecimal.valueOf(10)));

 

方能精确:

201.00

0.201

 

注意要用valueOf方法来获得实例,用new BigDecimal仍然存在精度问题。

分享到:
评论

相关推荐

    IEEE754 浮点数计算器

    IEEE754 浮点数计算器 。。。。。。。。。。。。。。。。。。。。。。。

    IEEE754浮点数与十六进制数转换器源码

    自己用Qt5.4.1的Qt Creator开发的IEEE754浮点数与十六进制数转换器,可以供Qt初学者学习槽函数的用法,也可以学习IEEE754浮点数与十六进制数转换的算法。两个文本框关联,实时将浮点数与十六进制数互相转换,代码...

    IEEE754 浮点数 小工具

    IEEE754标准是计算机科学领域中用于表示浮点数的一种广泛采用的国际标准,由电气和电子工程师协会(IEEE)制定。这个标准为单精度和双精度浮点数提供了统一的编码方式,使得不同计算机系统之间能够准确无误地交换...

    IEEE754浮点数乘法设计

    **IEEE754浮点数乘法设计** 在计算机科学中,IEEE754标准是用于表示浮点数的一种广泛采用的格式,旨在确保不同计算机系统间的兼容性和精确度。这个标准定义了浮点数的存储布局、表示方法以及相关的运算,包括加法、...

    IEEE754浮点数标准(英文版)

    综上所述,IEEE 754浮点数标准为计算机科学中的浮点运算提供了统一的框架,极大地促进了浮点数在不同计算环境中的可靠性和准确性,减少了因浮点数表示方式差异导致的计算误差和兼容性问题。该标准的普及与应用,对于...

    C# IEEE754浮点数转换示例代码

    ### C# IEEE754浮点数转换技术详解 #### 一、IEEE754标准简介 IEEE 754是国际电气与电子工程师协会(Institute of Electrical and Electronics Engineers, IEEE)制定的一种浮点数表示标准。该标准定义了浮点数在...

    IEEE754浮点数与十六进制转换,带4字节的顺序调整

    在计算机科学领域,IEEE 754 是一种标准,用于定义浮点数的表示方法,广泛应用于各种计算设备,包括CPU、...通过提供的`IEEE754.exe`程序,用户可能能够直观地体验和学习这个过程,帮助他们在实际开发中解决相关问题。

    IEEE754浮点数格式详解

    IEEE754 浮点数格式是计算机中浮点数表示的标准格式,由于不同机器所选的基值、尾数位长度和阶码位长度不同,因此对浮点数表示有较大差别,为了解决这个问题,美国 IEEE(电子及电子工程师协会)提出了 IEEE 754 ...

    IEEE754浮点数与十进制数互相转换原理分析

    ** IEEE754浮点数与十进制数互相转换原理 ** 在计算机科学中,IEEE754标准是用于表示浮点数的一种国际标准,它定义了浮点数的存储格式,使得不同计算机系统之间可以一致地表示和交换浮点数值。这个标准广泛应用于...

    Modbus IEEE754 浮点数 转换 方法 VB 代码

    而IEEE754标准则是浮点数表示的国际标准,它定义了如何用二进制来存储浮点数,包括单精度(32位)和双精度(64位)格式。在VB6(Visual Basic 6)编程环境中,处理Modbus协议中的32位整数到IEEE754浮点数的转换是...

    IEEE754浮点数详解.doc

    ### IEEE754浮点数详解 #### 一、IEEE754标准概述 IEEE754浮点数标准是一种广泛应用于计算机系统中的浮点数表示法,它定义了浮点数的存储格式以及基本运算规则。这一标准由IEEE(电气与电子工程师协会)于1985年...

    IEEE754.rar_IEEE754_ieee754标准_labvIEW 754_labview ieee754_浮点数

    IEEE754是计算机科学中用于表示浮点数的标准,由国际电气和电子工程师协会(IEEE)于1985年制定,并在后续版本中进行了更新。这一标准对浮点数的存储格式、精度、运算规则以及异常处理等进行了明确规定,旨在确保...

    十进制浮点数转IEEE754浮点数

    十进制浮点数转IEEE754浮点数,利用C语言中的union

    IEEE754浮点数转换

    ### IEEE754浮点数转换详解 #### 一、IEEE754标准简介 IEEE 754标准是国际电工电子工程师学会(Institute of Electrical and Electronics Engineers, IEEE)制定的一个浮点数算术的标准,它定义了计算机系统如何...

    LABVIEW将32位字符串转为IEEE754浮点数

    根据IEEE754协议手动编程,源代码无加密,请放心下载 2012以上版本

    IEEE754浮点数转换器(C#实现)

    学习计算机组成原理时实现的IEEE754标准的浮点数的机器数转换器,只要填入十进制浮点数值,便可以求出单精度的IEEE754标准的机器数表示方法,反之,给出IEEE754的机器数,可以求出其对应的十进制浮点数值

    IEEE754浮点数存储.pdf

    标题中的“IEEE754浮点数存储”指的是在计算机科学中用于表示和存储浮点数的国际标准,由IEEE(电气和电子工程师协会)制定。这个标准详细规定了单精度(single-precision)和双精度(double-precision)浮点数的二...

    C# 实现的IEEE754浮点数和32位比特字符串的相互转换

    本程序使用C#实现,使用的模板为“控制台应用... 本程序的功能是将IEEE754的32位浮点数转换为与其相对应的比特流字符串。 本程序的目的是为了完成一个编译器中需要将一个浮点数翻译为32位二进制的存储形式的子功能。

    IEEE754浮点数_数值转换_浮点数转换_

    总的来说,理解和掌握IEEE754浮点数标准对于理解计算机中的数值计算和精度问题至关重要。无论是软件开发、数据分析还是硬件设计,都可能涉及到浮点数的处理和转换,因此深入学习这一主题将对提升技术能力产生积极...

    JavaIEEE754浮点数的转换方法

    [Java]IEEE754浮点数的转换方法,方法都写好了,直接复制过去就可以用了,就这么简单!

Global site tag (gtag.js) - Google Analytics