关于Bigdecimal的问题】的更多相关文章

参加工作之后发现公司项目的数据库有关数值的字段类型,很少是之前常用的float和double, 而是一个没有接触过的decimal,在Java中表示的类型为BigDecimal, 而在业务中常常有关BigDecimal的加减乘除运算,所以查了一下资料,做了如下总结. 1.前言 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算. 双精度浮点型变量double可以处理16位有效数. float和double主要用来处理科学计算和工程计算,…
源地址:   http://blog.csdn.net/niannian_315/article/details/24354251 今天在用BigDecimal“出现费解”现象,以前虽然知道要避免用,但没研究过.借此机会,查证一下分享给大家参详参详. 在Java中经常可以用到double转BigDecimal,也经常进行除法运算,但是以下用法需要特别小心了. package com.ccxe.number; import java.math.BigDecimal; import java.mat…
1,保留两位小数 方法一:{ double c=3.154215; java.text.DecimalFormat myformat=new java.text.DecimalFormat("0.00"); String str = myformat.format(c); } 方式二:{ java.text.DecimalFormat df =new java.text.DecimalFormat("#.00"); df.format(你要格式化的数字); 例:ne…
1  创建一个BigDecimal 对象 BigDecimal Sum = new BigDecimal(0); 2  一个BigDecimal 对象,保留2位小数点 Sum.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); // Sum是一个BigDecimal 对象 3  加法操作: BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); b1.add…
一.简介Java在java.math包中提供的API类BigDecimal,用来对超过16位有效 位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.float和 double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal.BigDecimal所创建的是对象,我们 不能使用传统的+.-.*./等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法.方法中的参数也必须是Big…
这两天,由于我的必修课概率论里经常要用到排列组合的计算,感觉很麻烦,加上现代智能手机的计算器是没有这方面功能的. 所以,就自己动手写了个安卓的 排列组合 计算器,用了一天,发现有很大的问题,阶乘达百亿级别的数,程序将不再运行. 我这里举个例子,30的阶乘,30!=1x2x3x4x5....x30,这个明显是超出了整型 int 的范围了. 心想,试试长整型吧,后来发现,8字节的long 也是杯水车薪. 无奈求助百度,发现个好东西,BigDecimal 类. 查看了若干相关博文,发现全 TM 是复制…
BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5"); BigDecimal bignum3 = null; //加法 bignum3 = bignum1.add(bignum2); System.out.println("和 是:" + bignum3); //减法 bignum3 = bignum1.subtract(bignum…
1. BigDecimal 类型数据 的创建,构造函数 有 public BigDecimal(BigInteger intVal, long val, int scale, int prec); public BigDecimal(char[] in, int offset, int len) ; public BigDecimal(String val); public BigDecimal(double val); public BigDecimal(BigInteger val); pu…
//jdbctemplate批量新增的使用MENU_ID_LIST是前端页面传递到后端控制层,再由控制层传到实现层的List //JdbcTemplate是spring jdbctemplate通过注解实例化得到的 public int insertEmpMenu(final String EMP_ID_, final List<String> MENU_ID_LIST, Map<String, Object> operator) { if (MENU_ID_LIST == nul…
一.引言    借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合.但是,货币计算往往要求结果精确,这时候 可以使用int.long或BigDecimal.本文主要讲述BigDecimal使用过程中的一些陷阱.建议和技巧. 二.不可变性 BigDecimal是不可变类,每…
有时候可能会碰到需要计算非常大的数,比如7777777777777777777777777*3333333333333333333333333333,这样的计算需要显然不能用之前的方式来进行.我们不能用任何的数据类型来装下这么大的数,它已经操作了int.float.double的数据类型的范围.那么如何解决这样的计算需求呢?这时候,就需要进行大数操作. 在java.math这个包中有两个进行大数操作的类:java.math.BigInteger和java.math.BigDecimal.从名字上…
BigDecimal 构造方式主要包括4种: 支持double.int.long等类型计算,废话少说,直接上代码 import java.math.BigDecimal; public class BigDecimalUtil{ //几种类型的声明 //String BigDecimal bd1 = new BigDecimal("11111"); //int BigDecimal bd2 = new BigDecimal(11111); //long BigDecimal bd3 =…
public class test1_format { public static void main(String[] args) { BigDecimal decimal = new BigDecimal("1.12345"); System.out.println(decimal); BigDecimal setScale = decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN); System.out.println(setScale);…
BigDecimal需要创建对象进行计算(用不同的方式做运算) BigDecimal num1 = new BigDecimal("5"): BigDecimal num2 = new BigDecimal("10"): BigDecimal add = num2.add(new BigDecimal("1"));//加1 BigDecimal sub = num2.subtract(num1);//num2减num1 BigDecimal mu…
加法:add 减法:subtract 乘法:multiply 除法:divide BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5"); BigDecimal bignum3 = null; //加法 bignum3 = bignum1.add(bignum2); System.out.println("和 是:" + bignum3…
BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作.BigDecimal类的常用方法如表所示. BigDecimal类的常用方法 序号 方    法 类型 描    述 1 public BigDecimal(double val) 构造 将double表示形式转换 为BigDecimal 2 public BigDecimal(int va…
首先我们先来看如下代码示例: 1 public class Test_1 { 2 public static void main(String[] args) { 3 System.out.println(0.06+0.01); 4 System.out.println(1.0-0.42); 5 System.out.println(4.015*100); 6 System.out.println(303.1/1000); 7 } 8 9 } 运行结果如下. 0.0699999999999999…
//这篇随笔是为了提醒自己避免重复错误 //原先的代码是这样的,想着输出会是9.00,可是结果却是0.00 BigDecimal day_fee = new BigDecimal("0.00"); day_fee.add( new BigDecimal("9.00")); System.out.print("day_fee:" + day_fee); //正确的代码应该是这样的,输出的是9.00,BigDecimal使用方法自身不会改变,没想到居…
如果我们编译运行下面这个程序会看到什么? public class Test {    public static void main(String args[]) {                System.out.println(0.05 + 0.01);        System.out.println(1.0 - 0.42);        System.out.println(4.015 * 100);        System.out.println(123.3 / 100)…
1构造函数(主要测试参数类型为double和String的两个常用构造函数) BigDecimal aDouble =new BigDecimal(1.22); System.out.println("construct with a double value: " + aDouble); BigDecimal aString = new BigDecimal("1.22"); System.out.println("construct with a St…
(转)Java浮点数float,bigdecimal和double精确计算的精度误差问题总结 1.float整数计算误差 案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结果出现误差. 原因:超出float精度范围,无法精确计算. float和double的精度是由尾数的位数来决定的.浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响. float:2^23 = 8388608,一共七位,这意味着最多能有7位…
项目中遇到了数值运算,如网上所写的,一般有这几个方法: /** * 提供精确的加法运算. * @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));…
oracle中id为number类型,在java获取id时用getBigDecimal 相匹配, 如果想转换成int,重写model中的getInt方法: public Integer getInt(String attr) { return getNumber(attr).intValue(); } 如此,即可调用model.getInt(id),而不是每次转换BIgDecimal了. 但是,在jfinal中Db模式应该还是不可以.…
关于long.double.BigDecimal在效率.可用性.灵活性等等方面的技术性讨论和测试其实在网上已经很多了,本文也不是打算讨论他们的实现的,其实笔者也曾在很长的职业生涯周期中一度拘泥于此.但是渐渐的,已经对此没有那么的一根筋在乎了,至少从整个决策思路而言. 在涉及到金额或金融的计算中,有些时候为了显示或者严格准确性的要求,很多初级开发会毫不犹豫的选择BigDecimal,毕竟无论是java官方还是教科书都是这么说的.随着开发经验的增加.对性能优化的关注等等各种原因,很多的项目或系统开始…
在银行.帐户.计费等领域,BigDecimal提供了精确的数值计算.其中8种舍入方式值得掌握. 1.ROUND_UP 舍入远离零的舍入模式. 在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1). 注意,此舍入模式始终不会减少计算值的大小. 2.ROUND_DOWN 接近零的舍入模式. 在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短). 注意,此舍入模式始终不会增加计算值的大小. 3.ROUND_CEILING 接近正无穷大的舍入模式. 如果 BigDecim…
java.math.BigDecimal.min(BigDecimal val) 返回此BigDecimal和val的最小值. 声明 以下是java.math.BigDecimal.min()方法的声明 public BigDecimal min(BigDecimal val) 参数 val - 要计算最小值 返回值 此方法返回的值是此BigDecimal和val之间BigDecimal的较小者.如果它们相等,通过compareTo方法的定义,计算返回. 异常 NA 例子 下面的例子显示math…
1.相加 两个BigDecimal变量a,b. 如果想进行相加,即a加b的话,返回值需要使用a进行接收,如下: a = a.add(b); BigDecimal为不可变类, 所以执行运算的结果需要再返回给aa = a.add(b); 2.BigDecimal数据为null 两个BigDecimal 数据类型相加的话,如果被相加的数为null,会报空指针异常, 所以要做空指针判断,如下. if (bailPaySum.compareTo(faMoSum) == 1) { return 1;//可以…
1.比较大小 可以通过BigDecimal的compareTo方法来进行比较.返回的结果是int类型,-1表示小于,0是等于,1是大于. 例如: if(a.compareTo(b) == -1){ a } if(a.compareTo(b)==0){ a=b; } if(a.compareTo(b)==1){ a>b; } 2.常用的四则运算 加法: public static double add(double v1,double v2){ BigDecimal b1 = new BigDec…
如果需要精确的计算结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作. //================================================= // File Name : BigDecimal_demo //------------------------------------------------------------------------------ // Author : Common import java…
为什么要使用 bigdecimal? 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合.但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦. BigDecimal简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale…