`

BigDecimal对象的用法

    博客分类:
  • java
阅读更多
在我现在进行的项目中用到这种类型,用它来表示金额。可这种类型非常精确,当你在数据库里插入一条数据是6.00时,在显示时却是6.000000000000000000000。在页面显示非常不美观。在网上找了找,还真的找到了解决办法拿来和大家分享一下,在以后做系统时可以用到。它不仅可以做到double和float,而且在商业计算上也能显示它的作用。
java.math.BigDecimal。BigDecimal一共有4个够造方法,让我先来看看其中的两种用法:

第一种:BigDecimal(double val)
Translates a double into a BigDecimal.

第二种:BigDecimal(String val)
Translates the String repre sentation of a BigDecimal into a BigDecimal.

使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。


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;
/**
* 由于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 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();
}
};


分享到:
评论

相关推荐

    BigDecimal 加减乘除运算

    BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别...

    将 BigDecimal 类型转换为 Integer 类型.pdf

    当 BigDecimal 值小于或等于 Integer.MAX_VALUE(2^31-1)时,intValue() 方法返回 BigDecimal 对象的整数值。例如,在上面的示例代码中,输入的 BigDecimal 值为 123.45,其返回的 intValue() 值为 123。 当 ...

    JavaDemical:Java 数字API

    常用构造方法:可以将String类型的数字,int,double,long作为构造方法的参数传入进行构造一个BigDecimal对象。 常用方法: 加减乘除 add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。 subtract

    BigDecimalUtils

    BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别...

    Alibaba Java Coding Guidelines-2.0.0.zip

    “不能使用过时方法”三条规则,对比上一版本V1.0.6,增加了“禁止使用构造方法BigDecimal(double)的方式把double值转化为BigDecimal对象”,“浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能...

    JAVA浮点型的加法

    BigDecimal ADD的用法

    廖雪峰 Java 教程.doc

    BigDecimal 常用工具类 异常处理 Java的异常 捕获异常 抛出异常 自定义异常 使用断言 使用JDK Logging 使用Commons Logging 使用Log4j 使用SLF4J和Logback 反射 Class类 访问字段 调用方法 调用构造...

    unitizer:轻松单位转换

    Unitizer 使用 BigDecimal 对象来计算所有内容,因此您不必担心溢出。 用法 大多数对该库的调用只需要一行代码。 这是我正在谈论的一个快速示例: Milliseconds milliseconds = new Milliseconds ( new Minutes ...

    Java-Null-pointer-checker:输入对象不再导致 java 空指针异常

    原始对象:一个不包含其他对象的简单对象,在 Java 中它可以是 String、Integer、BigDecimal、Date、Double、Boolean、... 复杂对象:包含任意数量属性的对象,这些属性可以是原始对象或集合(现在是列表),和/或...

    percentage:Ruby gem用于处理百分比

    Percentage方法将数值对象转换为具有您期望的值的百分比对象: Percentage ( 50 ) # =&gt; 50% Percentage ( BigDecimal ( '17.5' ) ) # =&gt; 17.5% Percentage ( Rational ( 25 , 2 ) ) # =&gt; 12.5% Percentage 对象也...

    转换科学计数法的数值字符串为decimal类型的方法

    在操作数据库时,需要将字符串转换成decimal类型。 代码如下: select cast('0.12' as decimal(18,2)); select convert(decimal(18,2), '0.12'); 当需要将科学计数法的数字字符串转换成decimal时,这2种写法都...

    随机模拟java数据插件Jmockdata.zip

    Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。  The plug-in of Jmockdata what through random algorithm mock java data. Jmockdata插件通过随机算法模拟...

    ARCH4系统开发指南

    2.26.3 异常类的使用方法 67 2.26.3.1 ExceptionCause 67 2.26.3.2 BusinessException和PermissionException 67 2.26.3.3 DataVerifyException 68 2.26.3.4 ExceptionHelper 68 2.26.3.5 应用服务器异常 69 2.27 ...

    decimal.js:JavaScript的任意精度十进制类型

    产品特点整数和浮点数简单但功能齐全的API 复制JavaScript的Number.prototype和Math对象的许多方法还处理十六进制,二进制和八进制值比Java的BigDecimalJavaScript版本更快,更小,甚至更容易使用没有依赖关系广泛的...

    疯狂JAVA讲义

    学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 160 5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 ...

    Java开发详解.zip

    010402_【第4章:数组与方法】_方法的声明及使用笔记.pdf 010403_【第4章:数组与方法】_数组的引用传递笔记.pdf 010404_【第4章:数组与方法】_Java新特性对数组的支持笔记.pdf 020501_【第5章:面向对象基础】_...

    INTERFACEDE-DEGISKENLER

    数据类型是原始数据还是对象源数据(例如int / Integer)都没有关系。 如果我们将Inerface视为分析师, 这是一个特殊的类,它仅说明要做的事情,不会干扰内容。 在其中定义全局变量会导致过程干扰,降低代码质量...

    JAXBElementDefaultValueResolver:可用于为JAXB对象设置元素默认值的类

    有一个默认值插件,可以为基本类型(例如Boolean,Integer,String和Enums)设置默认值: : 但是,如果您需要映射其他类型的元素值,例如BigDecimal,则上述插件将不起作用。 因此,我创建了这个Spring bean,可...

    IOJU:生成i18n属性文件,进行编辑,获取类中的i18n对象-开源

    例如:int,boolean [],List ,BigDecimal [] [],YourPojo,YourPojo [],列表... 3)针对开发人员的i18n对象数据,到目前为止,世界上还没有类似的软件组件。 4)Ant .properties样式,例如:key.my.dir = $ {...

    java8集合源码分析-java8:java8

    1.Java是面向对象的语言,不能像函数式语言那样嵌套定义方法。 2.Java的匿名内部类只能存在于创建它的线程中,不能运行在多线程中,无法充分利用多核的硬件优势。 3.匿名内部类的缺点还有: 3.1 语法相对复杂。 3.2 ...

Global site tag (gtag.js) - Google Analytics