`
lancezhcj
  • 浏览: 48735 次
  • 性别: Icon_minigender_2
  • 来自: 衡阳
社区版块
存档分类
最新评论

java浮点数处理【转】

 
阅读更多
来源:http://www.blogjava.net/leekiang/archive/2010/07/27/327244.html

   public void testBigDecimalEquals() {
        assertEquals(new BigDecimal("3.50"),new BigDecimal("3.5"));//不相等
    }

System.out.println(0.030*100);//输出3.0
System.out.println(0.031*100);//输出3.1
System.out.println(0.032*100);//输出3.2
System.out.println(0.033*100);//输出3.3000000000000003
System.out.println(0.034*100);//输出3.4000000000000004
System.out.println(0.035*100);//输出3.5000000000000004
System.out.println(0.036*100);//输出3.5999999999999996
System.out.println(0.037*100);//输出3.6999999999999997
System.out.println(0.038*100);//输出3.8
System.out.println(0.039*100);//输出3.9

BigDecimal b2 = new BigDecimal(0.236);
System.out.println(b2);//输出0.2359999999999999875655021241982467472553253173828125

描述:
当我们使用一些"特殊的数字"进行运算时,或者调用BigDecimal中new BigDecimal(double val)进行构造的时候,将得到意想不到的结果。
原因:
Java中,浮点类型是依据IEEE754标准的。IEEE754定义了32位和64位双精度两种浮点二进制小数标准。采用二进制表示double,float等浮点数是不准确的。
同时BigDecimal的API声明,建议使用new BigDecimal(String val)进行构造,使用new BigDecimal(double val)进行构造的时候,将得到意想不到的结果(The results of this constructor can be somewhat unpredictable)。

解决办法:
1,通过String结合BigDecimal来转换。
String val = "0.236";
//使用new BigDecimal(String val)进行构造
BigDecimal a = new BigDecimal(""+val);
BigDecimal b = new BigDecimal(""+100);
//小数的位数与构造参数的位数一致
System.out.println(a.multiply(b));//输出23.600

2,使用DecimalFormat来确定小数点后位数
double val = 0.236*100;
//保留小数点后两位,若保留三位为"#.000"
DecimalFormat df = new DecimalFormat("#.00");
String str = df.format(val);
System.out.println(Double.valueOf(str));//输出23.6

感谢
http://www.blogjava.net/kalman03/archive/2010/10/25/336121.html
分享到:
评论

相关推荐

    4字节浮点数内码转换

    浮点数内码转换是计算机科学中的一个重要概念,特别是在处理数值计算和数据存储时。4字节浮点数,也称为单精度浮点数,遵循国际标准IEEE 754,这种格式在大多数现代计算机系统中广泛使用。4字节浮点数能够表示大约6...

    HEX与浮点数相互转换

    标题中的“HEX与浮点数相互转换”指的是在计算机科学中处理数字时的一个常见操作。HEX(十六进制)是计算机中广泛使用的数字表示方式,尤其在内存和CPU指令中,而浮点数则用于表示带有小数部分的数值,常用于科学...

    js浮点数处理转精确值

    在开发工具方面,`Quartz.chm`可能是一个关于Quartz库的文档,Quartz是一个广泛使用的Java作业调度框架,它与JavaScript的浮点数处理并无直接关系。但在编写Web应用时,我们可能需要在服务器端使用Quartz来调度执行...

    JAVA中浮点数的运算

    在Java编程语言中,浮点数的运算涉及到的是数值计算,特别是小数部分的处理。浮点数在计算机内部是以二进制表示的,这与我们通常使用的十进制系统不同,因此在进行浮点数运算时可能会出现精度丢失的问题。这篇博客...

    单精度浮点数转Modbus协议十六进制格式.rar

    在工业自动化领域,Modbus协议是一种广泛使用的通信协议,它允许设备...通过使用"单精度浮点数转Modbus协议十六进制格式.vi",用户可以在实际应用中轻松处理这种转换,确保数据在遵循Modbus协议的系统间的正确通信。

    Java浮点数.pdf

    总的来说,Java中的浮点数类型提供了对实数的高效存储和处理,但因为舍入误差和非均匀的间隔,可能不适合需要精确计算的场合。理解浮点数的存储和工作原理对于编写高性能和正确性的代码至关重要。

    单精度&双精度浮点数与十六进制数相互转换

    在实际编程中,大多数编程语言如C++、Java、Python等都提供了内置函数来进行浮点数和十六进制之间的转换。例如,在Python中,可以使用`float.hex()`和`float.fromhex()`方法实现这一过程。 理解这些转换机制对编程...

    IEEE_754_16进制转十进制浮点数 工具

    标题中的“IEEE_754_16进制转十进制浮点数 工具”指的是一个专门用于处理按照IEEE 754标准表示的16进制浮点数,并将其...这样的工具简化了浮点数处理过程,帮助开发者和工程师更好地理解和调试涉及浮点数的代码和计算。

    浮点数与十进制数转换工具

    在编程语言中,如Python、Java、C++等,都有内置的函数或者库来支持浮点数和十进制数之间的转换,例如Python的`float()`和`int()`函数,Java的`Float.parseFloat()`和`Integer.parseInt()`方法。理解这些转换机制...

    疯狂Java讲义 浮点数转换成人民币读法

    总的来说,将浮点数转换为人民币读法是一个涉及数值处理、字符串操作和格式化技术的综合性问题,通过这个实践可以加深对Java编程的理解,并提升编程技巧。在实际工作中,这样的转换可能还会涉及到多语言环境下的本地...

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

    **正文** IEEE754浮点数标准是计算机科学中用于表示和操作浮点数的国际标准,由电气...无论是软件开发、数据分析还是硬件设计,都可能涉及到浮点数的处理和转换,因此深入学习这一主题将对提升技术能力产生积极影响。

    java-16进制4字节转Float

    在Java编程语言中,将16进制的4字节数据转换为浮点数是常见的数据处理操作,尤其是在与硬件设备交互或者进行低级通信时。这个过程涉及到字节顺序的理解,以及Java中的数据类型转换。以下是关于这个主题的详细解释。 ...

    64位十六进制转浮点数

    转换工具和编程语言(如Python、Java、C++等)通常内置了直接进行这种转换的功能,但理解转换原理有助于更好地理解和处理浮点数相关的计算问题,尤其是在进行数值计算、数据分析或者低级系统编程时。在编程中,可以...

    Java关键字大全 Java关键字大全

    Java 关键字是编程语言中预定义...它们各自在 Java 编程中扮演着特定的角色,用于构建程序的不同方面,如控制流程、类和对象的定义、异常处理以及访问修饰等。了解和熟练使用这些关键字是成为熟练 Java 开发者的关键。

    浮点数转四字节数HexToByte

    浮点数转换为四字节数HexToByte是计算机编程中的一个重要操作,特别是在处理二进制数据、网络传输或存储时。浮点数是一种用于表示数值的格式,它包括正负号、指数和尾数部分,能够精确表示大部分实数。在计算机内部...

    16进制单精度(32位)浮点型转换器源码

    对于Java开发者来说,这个转换器可能会使用Java的`java.nio.ByteBuffer`类来处理字节顺序,以及`Float.intBitsToFloat()`方法来完成从整数到浮点数的转换。此外,源码可能还包含错误检查和用户界面部分,以确保输入...

    ModbusRTU协议中浮点数转换

    本文将深入探讨如何在C#中处理Modbus RTU协议中的浮点数转换,包括浮点数到整型以及整型到浮点数的转换,并简要介绍Modbus RTU协议。 首先,让我们理解一下Modbus RTU协议。Modbus是基于串行通信的一种简单协议,...

    java精确计算浮点数工具类

    Java对浮点数的计算是不精确的,比如0.05+0.01结果不是0.06,而是0.060000000000000005,更有甚者,一个数除以0.0,Java是不会抛异常,而是得出无穷大的结果.本工具类解决了上述问题.该类提供了加减乘除四则运算的精确计算...

    浮点数与十六进制转换.rar

    了解浮点数和十六进制转换的原理对理解和调试涉及数字表示的代码至关重要,尤其是在处理浮点数精度问题、数据传输或解析二进制数据时。而通过使用特定的转换工具,可以简化这个过程,提高效率,这对于IT从业者来说是...

    JAVA转byte[]为int,long,double

    以上就是关于“JAVA转byte[]为int,long,double”的知识讲解,理解这些转换对于处理二进制数据至关重要,尤其是在网络通信、序列化和反序列化等场景中。通过熟练掌握这些转换,你可以更好地处理和解析不同数据类型的...

Global site tag (gtag.js) - Google Analytics