随笔 - 147  文章 - 71  trackbacks - 0
<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(1)

随笔分类(146)

随笔档案(147)

文章分类(28)

文章档案(28)

喜欢的Blog

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 NumberFormat类:(public abstract class NumberFormat extends Format)
  用java.text.NumberFormat类对输出的数字结果进行必要的格式化。
  使用该类如下方法类实例化一个NumberFormat对象:
   public static final NumberFormat getInstance()
  然后用该对象调用如下方法可以格式化数字number(返回字符串对象):
   public final String format(double number)
  NumberFormat类有如下常用方法:
  public void setMaximumFractionDigits(int newValue)//设置数的小数部分所允许的最大位数。
  public void setMaximumIntegerDigits(int newValue)//设置数的整数部分所允许的最大位数。
  public void setMinimumFractionDigits(int newValue)//设置数的小数部分所允许的最小位数。
  public void setMinimumIntegerDigits(int newValue)//设置数的整数部分所允许的最小位数。
  (更多方法及用法看JDK6API参考。)
Java提供了两个用于高精度计算的类:BigInteger和BigDecimal。虽然它们大体上属于“包装器类”的范畴,但两者都没有对应的基本类型。不过,这两个类包含的方法,提供的操作与对基本类型所能执行的操作相似。也就是说,能作用于int或float的操作,也同样能作用于BigInteger或BigDecimal。只不过必须以方法调用方式取代运算符方式来实现。由于这么做复杂了许多,所以运算速度会比较慢,相比而言,int和float是以速度取代了精度。

BigInteger支持任意精度的整数。也就是说,在运算中,可以准确地表示任何大小的整数值,而不会丢失任何信息。

常用方法:
   abs()  //返回其值是此BigInteger的绝对值的BigInteger。
   add(BigInteger val)  //返回其值为(this+val)的BigInteger。
   subtract(BigInteger val)  //返回其值为(this-val)的BigInteger。
   multiply(BigInteger val)  // 返回其值为(this*val)的BigInteger。
   divide(BigInteger val)  //返回其值为(this/val)的BigInteger。
   remainder(BigInteger val)  //返回其值为(this%val)的BigInteger。
   compareTo(BigInteger val)  //将此BigInteger与指定的BigInteger进行比较。返回值1、0、-1分别表示大于、等于、小于
   pow(int exponent)  //返回当前大数的exponent次幂。
   toString()  //返回此BigInteger的十进制字符串表示形式。
   toString(int radix)  //返回此BigInteger的给定基数(radix进制)的字符串表示形式。

1.BigInteger(大整数):
BigInteger bi1=new BigInteger("1234567890123456890");
BigInteger bi2=BigInteger.valueOf(123L);
bi1=bi1.add(bi2);//b1+b2
bi1=bi1.multiply(bi2);//b1*b2
bi1=bi1.subtract(bi2);//b1-b2
bi1=bi1.divide(bi2);// b1/b2

BigDecimal支持任何精度的定点数,例如,可以用它进行精确的货币运算。

2.BigDecimal(大浮点数):
BigDecimal bd = new BigDecimal("3.1415926");
bd = bd.setScale(2,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位
附:对BigDecimal常用方法的归类

import java.math.BigDecimal; 

public class Arith 

/** 
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 
* 确的浮点数运算,包括加减乘除和四舍五入。 
*/
 
//默认除法运算精度 
private static final int DEF_DIV_SCALE = 10
    
//这个类不能实例化 
private Arith()
}
 

    
/** 
     * 提供精确的加法运算。 
     * 
@param v1 被加数 
     * 
@param v2 加数 
     * 
@return 两个参数的和 
     
*/
 
    
public static double add(double v1,double v2)
        BigDecimal b1 
= new BigDecimal(Double.toString(v1)); 
        BigDecimal b2 
= new BigDecimal(Double.toString(v2)); 
        
return b1.add(b2).doubleValue(); 
    }
 
    
/** 
     * 提供精确的减法运算。 
     * 
@param v1 被减数 
     * 
@param v2 减数 
     * 
@return 两个参数的差 
     
*/
 
    
public static double sub(double v1,double v2)
        BigDecimal b1 
= new BigDecimal(Double.toString(v1)); 
        BigDecimal b2 
= new BigDecimal(Double.toString(v2)); 
        
return b1.subtract(b2).doubleValue(); 
    }
 
    
/** 
     * 提供精确的乘法运算。 
     * 
@param v1 被乘数 
     * 
@param v2 乘数 
     * 
@return 两个参数的积 
     
*/
 
    
public static double mul(double v1,double v2)
        BigDecimal b1 
= new BigDecimal(Double.toString(v1)); 
        BigDecimal b2 
= new BigDecimal(Double.toString(v2)); 
        
return b1.multiply(b2).doubleValue(); 
    }
 

    
/** 
     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 
     * 小数点以后10位,以后的数字四舍五入。 
     * 
@param v1 被除数 
     * 
@param v2 除数 
     * 
@return 两个参数的商 
     
*/
 
    
public static double div(double v1,double v2)
        
return div(v1,v2,DEF_DIV_SCALE); 
    }
 

    
/** 
     * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 
     * 定精度,以后的数字四舍五入。 
     * 
@param v1 被除数 
     * 
@param v2 除数 
     * 
@param scale 表示表示需要精确到小数点以后几位。 
     * 
@return 两个参数的商 
     
*/
 
    
public static double div(double v1,double v2,int scale)
        
if(scale<0)
            
throw new IllegalArgumentException( 
                
"The scale must be a positive integer or zero"); 
        }
 
        BigDecimal b1 
= new BigDecimal(Double.toString(v1)); 
        BigDecimal b2 
= new BigDecimal(Double.toString(v2)); 
        
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); 
    }
 

    
/** 
     * 提供精确的小数位四舍五入处理。 
     * 
@param v 需要四舍五入的数字 
     * 
@param scale 小数点后保留几位 
     * 
@return 四舍五入后的结果 
     
*/
 
    
public static double round(double v,int scale)
        
if(scale<0)
            
throw new IllegalArgumentException( 
                
"The scale must be a positive integer or zero"); 
        }
 
        BigDecimal b 
= new BigDecimal(Double.toString(v)); 
        BigDecimal one 
= new BigDecimal("1"); 
        
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); 
    }
 
    
   
/** 
    * 提供精确的类型转换(Float) 
    * 
@param v 需要被转换的数字 
    * 
@return 返回转换结果 
    
*/
 
    
public static float convertsToFloat(double v)
    BigDecimal b 
= new BigDecimal(v); 
    
return b.floatValue(); 
    }
 
    
    
/** 
* 提供精确的类型转换(Int)不进行四舍五入 
@param v 需要被转换的数字 
@return 返回转换结果 
*/
 
public static int convertsToInt(double v)
BigDecimal b 
= new BigDecimal(v); 
    
return b.intValue(); 
}
 

/** 
* 提供精确的类型转换(Long) 
@param v 需要被转换的数字 
@return 返回转换结果 
*/
 
public static long convertsToLong(double v)
BigDecimal b 
= new BigDecimal(v); 
    
return b.longValue(); 
}
 

/** 
* 返回两个数中大的一个值 
@param v1 需要被对比的第一个数 
@param v2 需要被对比的第二个数 
@return 返回两个数中大的一个值 
*/
 
public static double returnMax(double v1,double v2)
BigDecimal b1 
= new BigDecimal(v1); 
BigDecimal b2 
= new BigDecimal(v2); 
    
return b1.max(b2).doubleValue(); 
}
 

/** 
* 返回两个数中小的一个值 
@param v1 需要被对比的第一个数 
@param v2 需要被对比的第二个数 
@return 返回两个数中小的一个值 
*/
 
public static double returnMin(double v1,double v2)
BigDecimal b1 
= new BigDecimal(v1); 
BigDecimal b2 
= new BigDecimal(v2); 
    
return b1.min(b2).doubleValue(); 
}
 

/** 
* 精确对比两个数字 
@param v1 需要被对比的第一个数 
@param v2 需要被对比的第二个数 
@return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1 
*/
 
public static int compareTo(double v1,double v2)
BigDecimal b1 
= new BigDecimal(v1); 
BigDecimal b2 
= new BigDecimal(v2); 
    
return b1.compareTo(b2); 
}

}
 


Math类:
  java.lang.Math类中包含基本的数字操作,如指数、对数、平方根和三角函数。
  java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(BigDecimal)算法的类java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。
  public static final Double E = 2.7182818284590452354
  public static final Double PI = 3.14159265358979323846
  public static long abs(double x):传回 x 的绝对值。X也可int long float
  public static long sin(double x): 传回x径度的正弦函数值 
  public static long cos(double x):传回x径度的余弦函数值  
  public static long tan(double x): 传回x径度的正切函数值
  public static long asin(double x):传回x值的反正弦函数值。
  public static long acos(double x):传回x值的反余弦函数值。
  public static long atan(double x):传回x值的反正切函数值。
  public static long atan2(double x, double y):传回极坐标(polar)的θ值
  public static long floor(double x):传回不大于x的最大整数值
  public static long ceil(double x):传回不小于x的最小整数值。
  public static long exp(double x):传回相当于ex值
  public static long log(double x):传回x的自然对数函数值
  public static long max(double x,double y):传回x、y较大数
  public static long min(double x,double y):传回x、y较小数
  public static long pow(double x,double y):传回x的y次幂值
  public static long sqrt(double x): 传回x开平方值
  public static long rint(double x):传回最接近x的整数值
  public static long round(double x):传回x的四舍五入值
  public static long toDegrees(double angrad):传回将angrad径度转换成角度
  public static long toRadians(double angdeg): 传回将angdeg角度转换成径度
  public static long random():传回随机数值,产生一个0-1之间的随机数(不包括0和1)

posted on 2009-09-05 10:14 飞翔天使 阅读(5145) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: