class TestXiaoShu{

public static void main(String args[]){
//float j = 324.2f,i ;//当是这个的时候就会是2.000122
  //double j = 324.2,i;//当是这个的时候就会是1.99999999999
double j = 5.2,i;//当是这个的时候2.000000000001
i = (int)j;
j = j - i;
System.out.println(j);
}}
这个精度怎么确定,什么时候才会是2.什么时候是1.

解决方案 »

  1.   

    一般是看他们的有效数字的,用科学计数法来表示。float有效数字好像是8位,double 10几位。
      

  2.   

    用float和double一般会出现精度问题,原因不太懂,是二进制表示的问题吧
    用BigDecimal吧
      

  3.   

    好像是和二进制存取有关,因为float占4个字节,double8个,精度只能在一定范围内有效。
    如果对精度要求高可以使用bigDecimal和bigInteger
      

  4.   

    我想把一个数字,转换成人民币大写,但是这个数字包含小数,所以就得处理小数。
    我是这样处理的,把整数和小数分开考虑,因为人民币包含的只有分和角,所以分开。
    但是,当把数字传进的时候类型的定义就比较麻烦,如果是float可以直接处理到角,但是分还是老错。