阿心Ahsun

27岁。。。有方向继续拼搏了么?

<2024年4月>
 123456
78910111213
14151617181920
21222324252627
282930    
       

网站导航

文章搜索

文章分类

文章归档

图库分类

图库归档

收藏分类

收藏归档

最新文章评论

最新图片评论

博客统计

我的文章      我的图库      我的收藏      我的留言

上一篇 java BigDecimal对象的用法(转) 下一篇

公共分类:其 它  个人分类:技术--java相关  Posted: 2008/2/3 3:19:47 阅读(18133 ) 收藏 (0 ) 评论 (0 ) |  编辑  收藏  回复

Callni 网络电话,显示真号,沟通你我,传递心声:www.callni.com
拨打全球,低至2分钱/分钟,注册赠送10分钟,支持电脑/手机/座机


BigDecimal对象的用法
   
 在我现在进行的项目中用到这种类型,用它来表示金额。可这种类型非常精确,当你在数据库里插入一条数据是6.00时,在显示时却是6.000000000000000000000。在页面显示非常不美观。在网上找了找,还真的找到了解决办法拿来和大家分享一下,在以后做系统时可以用到。它不仅可以做到double和float,而且在商业计算上也能显示它的作用。 
java.math.BigDecimal[/b]。BigDecimal[/b]一共有4个够造方法,让我先来看看其中的两种用法:
第一种:BigDecimal[/b](double val)
Translates a double into a BigDecimal[/b]. 
第二种:BigDecimal[/b](String val)
Translates the String repre sentation of a BigDecimal[/b] into a BigDecimal[/b]. 
使用BigDecimal[/b]要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal[/b],在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal[/b])再转换为浮点数。
public static double add(double v1,double v2)
public static double sub(double v1,double v2)
public static double mul(double v1,double v2)
public static double div(double v1,double v2)
public static double div(double v1,double v2,int scale)
public static double round(double v,int scale)
附录
源文件Arith.java:
import java.math.BigDecimal[/b];
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/
public class Arith{ //默认除法运算精度
private static final int DEF_DIV_SCALE = 10; //这个类不能实例化
private Arith(){
}
/**
* 提供精确的加法运算。
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static double add(double v1,double v2){
BigDecimal[/b] b1 = new BigDecimal[/b](Double.toString(v1));
BigDecimal[/b] b2 = new BigDecimal[/b](Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 提供精确的减法运算。
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1,double v2){
BigDecimal[/b] b1 = new BigDecimal[/b](Double.toString(v1));
BigDecimal[/b] b2 = new BigDecimal[/b](Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确的乘法运算。
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1,double v2){
BigDecimal[/b] b1 = new BigDecimal[/b](Double.toString(v1));
BigDecimal[/b] b2 = new BigDecimal[/b](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(scaleBigDecimal[/b] b1 = new BigDecimal[/b](Double.toString(v1));
BigDecimal[/b] b2 = new BigDecimal[/b](Double.toString(v2));
return b1.divide(b2,scale,BigDecimal[/b].ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v,int scale){
if(scaleBigDecimal[/b] b = new BigDecimal[/b](Double.toString(v));
BigDecimal[/b] one = new BigDecimal[/b]("1");
return b.divide(one,scale,BigDecimal[/b].ROUND_HALF_UP).doubleValue();
}
};


本文关键词:BigDecimal

相关文章

无相关文章

评论


[共0条评论]

回复

  (目前状态:添加新回复)
用户名: (非匿名用户必填项,登陆用户不需填)
密   码: (非注册用户填密码将能修改回复内容)
主   页:
验证码:
内容(支持UBB编码)


(按Ctrl+回车键可以直接保存)