BigDecimal类
来源:互联网 发布:怎么获取淘宝客pid 编辑:程序博客网 时间:2024/04/28 02:31
import java.math.BigDecimal;
/**
* BigDecimal类表示不可变的、任意精度的有符号十进制数
* BigDecimal类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换
* 如果对double符点数进行操作时,一定要使用String对象作为构造函数参数,而不是直接使用double数字;否则会发生精度丢失
* @author liyongyong
*
*/
public class TestBigDecimal {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal d1 = new BigDecimal("0.05"); //基于字符串
BigDecimal d2 = new BigDecimal(0.05); //基于double符点数
BigDecimal d3 = BigDecimal.valueOf(0.01);
System.err.println("下面使用String作为BigDecimal构造函数参数的计算结果:");
System.out.println("0.05 + 0.01 = " + d1.add(d3));
System.out.println("0.05 - 0.01 = " + d1.subtract(d3));
System.out.println("0.05 * 0.01 = " + d1.multiply(d3));
System.out.println("0.05 / 0.01 = " + d1.divide(d3));
System.err.println("下面使用Double作为BigDecimal构造函数参数的计算结果:");
System.out.println("0.05 + 0.01 = " + d2.add(d3)); //发生精度丢失
System.out.println("0.05 - 0.01 = " + d2.subtract(d3));
System.out.println("0.05 * 0.01 = " + d2.multiply(d3));
System.out.println("0.05 / 0.01 = " + d2.divide(d3));
System.err.println("0.05 + 0.01 = " + (0.05 + 0.01));
System.out.println("0.05 + 0.01 = " + d1.add(d3).doubleValue());
}
}
import java.math.BigDecimal;
/**
* Arith工具类,是对double符点数进行加、减、乘、除基本运算。
* 如果程序中需要对double符点数进行操作,则需要先将double类型数值包装成BigDecimal对象,调用BigDecimal对象
* 的方法执行运算后转换成double类型,这是比较烦琐的过程,则以BigDecimal为基础定义一个Arith工具
* @author liyongyong
*
*/
public class Arith {
//默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
private Arith(){} //不允许创建对象
public static double add(double v1, double v2)
{
BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.add(b2).doubleValue();
}
public static double subtract(double v1, double v2)
{
BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.subtract(b2).doubleValue();
}
public static double multiply(double v1, double v2)
{
BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.multiply(b2).doubleValue();
}
public static double divide(double v1, double v2)
{
BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("0.05 + 0.01 = " + Arith.add(0.05, 0.01));
System.out.println("1.0 - 0.42 = " + Arith.subtract(1.0, 0.42));
System.out.println("4.015 * 100 = " + Arith.multiply(4.015, 100));
System.out.println("123.3 / 100 = " + Arith.divide(123.3, 100));
}
}
- BigDecimal类
- BigDecimal类
- BigDecimal类
- BigDecimal类
- BigDecimal类
- BigDecimal类
- BigDecimal类
- BigDecimal类
- BigDecimal类
- BigDecimal类
- BigDecimal类
- 类 BigDecimal
- BigDecimal类
- BigDecimal类
- BigDecimal 类
- BigDecimal 类
- BigDecimal类
- 常见类---BigDecimal类
- Android 的一些特殊技巧的代码实现
- 纯CSS Tooltips(转自:http://w3c.web600.net/html/XHTMLCSS/XHTMLCSSC/20080317/557.html)
- [图解教程]Axis2与Eclipse整合开发Web Service之二:WSDL逆向生成服务端
- 总结多种RT-OS特点
- Android 官方博客 - Android应用程序的内存分析(翻译)
- BigDecimal类
- [图解教程] Axis2与Eclipse整合开发Web Service之一:简单的计算服务例子
- 大体了解JOSN
- VC++动态链接库(DLL)编程深入浅出(二)
- DB2 insert or update 解决方案(使用merge into 解决一条记录,或者多表关系问题)
- 我印象最深刻的 MLB 系列賽
- UTF-8编码中BOM的检测与删除
- FTP命令使用详解
- 一种求和的创新思维的应用6(继续扩张)