Java中Double类型计算问题

时间:2022-03-01 15:50:09

public class Test{
    public static void main(String args[]){
        System.out.println(0.05+0.01);
        System.out.println(1.0-0.42);
        System.out.println(4.015*100);
        System.out.println(123.3/100);
    }
};
你没有看错!结果确实是
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。

float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal,如果使用oracle数据库,数字字段通常使用number,不用限定小数位数,因为在某些商业计算中是无法确定小数位数的,java中一定要使用BigDecimal来进行计算,然后在转化成Double 存到数据库中。建表语句参考如下:

create table PO.PO_LINES_ALL
(
PO_LINE_ID NUMBER not null,
LAST_UPDATE_DATE DATE not null,
LAST_UPDATED_BY NUMBER not null,
PO_HEADER_ID NUMBER not null,
LINE_TYPE_ID NUMBER not null,
LINE_NUM NUMBER not null,
LAST_UPDATE_LOGIN NUMBER,
CREATION_DATE DATE,
CREATED_BY NUMBER,
ITEM_ID NUMBER,
ITEM_REVISION VARCHAR2(3),
CATEGORY_ID NUMBER,
ITEM_DESCRIPTION VARCHAR2(240),
UNIT_MEAS_LOOKUP_CODE VARCHAR2(25),
QUANTITY_COMMITTED NUMBER,
COMMITTED_AMOUNT NUMBER,
ALLOW_PRICE_OVERRIDE_FLAG VARCHAR2(1),
NOT_TO_EXCEED_PRICE NUMBER,
LIST_PRICE_PER_UNIT NUMBER,
UNIT_PRICE NUMBER,
QUANTITY NUMBER,
AMOUNT NUMBER
)

本文参考:

http://blog.csdn.net/pttaag/article/details/5912171