`
lancezhcj
  • 浏览: 47807 次
  • 性别: 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
分享到:
评论

相关推荐

    java精确计算浮点数工具类

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

    modbus浮点数处理(IEEE754标准)-易语言

    工控行业通讯485常用modbus协yi,通讯的数据遵循IEEE754协yi存储,为了方便使用,对modbus通讯数据进行处理。

    Java开发技术大全(500个源代码).

    realExample.java 演示浮点数的有效位数 remainder.java 取余运算示例 showBreak.java 利用标号语句跳转出所有循环嵌套 showCount.java 循环计数示例 showDoubleLoop.java 演示双重循环 showDoubleLoopSe.java...

    ryu:将浮点数转换为十进制字符串

    主要的实现是在C中进行的,并且到Java的转换最短。 所有算法均已在同行评审的出版物中发表。 在撰写本文时,这些是已知最快的浮点到字符串转换算法。 固定的科学转换例程比sprintf的常规实现快几倍(我们将其与...

    廖雪峰 Java 教程.doc

    浮点数运算 布尔运算 字符和字符串 数组类型 流程控制 输入和输出 if判断 switch多重选择 while循环 do while循环 for循环 break和continue 数组操作 遍历数组 数组排序 多维数组 命令行参数 面向...

    详解JS– 浮点数运算处理

    最近在做一个项目,页面上会存在一些JS浮点数的运算,发现JS浮点数运算存在一些bug.譬如: 0.1+0.2 == 0.30000000000000004 0.1 + 0.7 == 0.7999999999999999 7*0.8 == 5.6000000000000005 5.6/7 == 0....

    Java运算符介绍.pptx.pptx

    Java运算符分类 Java运算符主要分为四类:算术运算符、关系运算符、逻辑运算符和位运算符,这些运算符...位运算符主要用于处理二进制数据,包括与、或、非、异或和移位等操作,它们可以实现对数据的快速处理和转换。

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.3.5 小心使用浮点数进行比较 53 3.3.6 boolean和char 55 3.3.7 不要使用还没有创建出来的变量 57 3.3.8 String——char串起的项链 58 3.3.9 转义符——看不见写得出 61 3.4 小结:基本数据类型—— Java中...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.3.5 小心使用浮点数进行比较 53 3.3.6 boolean和char 55 3.3.7 不要使用还没有创建出来的变量 57 3.3.8 String——char串起的项链 58 3.3.9 转义符——看不见写得出 61 3.4 小结:基本数据类型—— Java中...

    Java开发手册-华山版-1.5.0.pdf

    比如,switch 的 NPE 问题、浮点数的比较、无泛型限制、锁的使用方式、判断表达式、日期格式等。 3)修改描述 112 处。比如,IFNULL 的判断、集合的 toArray、日志处理等。 4)完善若干处示例。比如,命名示例、卫...

    java个人所得税计算程序

    java 个人所得税计算程序 1.1. 类名:IncomeTax 1.1.1. 类描述 程序入口类,完成菜单显示、输入、回显、计算个人所得税、修改相关计算参数的总调度。 1.1.2. 类成员变量 1) private static TaxTable tt //税率表 ...

    Java开发手册-华山

    此版发布于2019年06月15日,并正式更名为《Java开发手册》,用发布者的话说:“它属于所有参与其中的贡献者,也以此聊表我们对全球Java开发者的感谢”。此版升级内容包括: 1)新增21条新规约。比如,switch的空指针...

    记录所有有关java的学习笔记.rar

    给大家分享一篇我之前在学习java过程中的关于java基础部分的笔记,比较详细,...浮点数转成整数会直接舍弃小数点后位数。 4.字面值后缀,L D F 5.字面值前缀,0b 二进制;0x 16进制;0 8进制; \u char 类型16进制

    java编写一个类,该类可以进行加、减、乘、除四则运算,并且输出运算结果

    编写一个Java源程序,其中包含: (1)编写一个类,该类可以进行加、减、乘、除四则运算,并且可以输出运算结果。此外,对于除法,如果被除数为0,该类可以报错。对于加、减、乘、除之外的运算符,该类应该告知无法...

    java随机数

    ThreadLocalRandom也比其他任何处理高并发的方法要更快。 经验 Chris Marasti-Georg 指出: 1.Math.round(Math.random() * 10) 使分布不平衡,例如:0.0 - 0.499999将四舍五入为0,而0.5至1.499999将四舍五入为1。...

    新版java开发手册(华山版).zip

    《Java开发手册》最新版涵盖了史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2.修改描述112处。...

    阿里巴巴Java开发手册1_5_0.zip

    《Java开发手册》更新版,涵盖史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2.修改描述112处。...

    将 BigDecimal 类型转换为 Integer 类型.pdf

    其中,BigDecimal 是一种高精度的十进制浮点数类型,适合处理大数值计算。在一些需求中,我们可能需要将 BigDecimal 值转换为 Integer 类型。这时,可以使用 BigDecimal 的 intValue() 方法进行转换。 当 ...

    java GUI 实现冒泡排序

    使用NetBeans设计界面,实现带界面冒泡排序 对输入String进行处理,将连续数字保存入数组(考虑负数,浮点数,首位为0的情况) 压缩包包含,使用java源文件生成的exe文件

    StringHelpers.java

    字符处理辅助类:主要处理字符的各种操作; 字符追加、字符替换、字符编码转换、各种类型的转化; 将字符串形式的浮点数值转换成浮点数,如:"234.7"-->234.7

Global site tag (gtag.js) - Google Analytics