日期:2014-05-20  浏览次数:20887 次

3.9898/4=0.99745,为什么(3.9898/4)*100=99.74499999999999,类型为double,有程序
import   java.text.*;
public   class   TY  
{
public   static   void   main(String[]   args)  
{
double   per=3.9898;
DecimalFormat   df=new   DecimalFormat( "##.00 ");
double   pp=per/4;
System.out.println(pp);
System.out.println(pp*100);
System.out.println(df.format(per*100/4)+ "% ");
}
}


------解决方案--------------------
应该是浮点型的精度问题。
如果想得到准确的精度,使用BigDecimal类。
------解决方案--------------------
是浮点型的精度问题

import java.text.*;
public class TY
{
public static void main(String[] args)
{
float per=3.9898f;
DecimalFormat df=new DecimalFormat( "##.00 ");
float pp=per/4;
System.out.println(pp);
System.out.println(pp*100);
System.out.println(df.format(per*100/4)+ "% ");
}
}
------解决方案--------------------
action_520_12(小马哥) ( ) 信誉:100 2007-08-14 16:07:29 得分: 0


应该是浮点型的精度问题。
如果想得到准确的精度,使用BigDecimal类。

同意!

------解决方案--------------------
一样的 直接调用BigDecimal的构造方法
------解决方案--------------------
API
------解决方案--------------------
// 一般采用字符串进行构造
BigDecimal big1 = new BigDecimal( "3.9898 ");
BigDecimal result = big1.divide(new BigDecimal( "4 "));
System.out.println(result.toString());
result = result.multiply(new BigDecimal( "100 "));
System.out.printf( "%.2f%%%n ", result);