JAVA通过BigDecimal四舍五入解决方案和注意事项

 /**
     * @Description: 四舍五入留2位小数
     * @param valueName
     * @return
     */
    public static Double formateDouble45(Double d){
        if(d == null){
            return 0d;
        }
        BigDecimal   b   =   new   BigDecimal(d);
        double   f   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();
        return f;
    }

上面是以前我写的一个四舍五入保留2位小数的方法,最近发现是有问题的

例如:2.555 得到是2.55 而不是预想的2.56

改进如下:

<pre name="code" class="java">    /**
	 * @Description: 四舍五入留2位小数
	 * @param valueName
	 * @return
	 */
	public static Double formateDouble45(Object d){
		if(d == null){
			return 0d;
		}
		BigDecimal   b   =   new   BigDecimal(d.toString());
		double   f   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();
		return f;
	}

通过测试发现如果构建BugDecimal的时候使用String类型的话,则可实现全部正常的四舍五入.

具体原因不详.

				
时间: 2024-11-11 09:19:59

JAVA通过BigDecimal四舍五入解决方案和注意事项的相关文章

java.math.BigDecimal cannot be cast to java.lang.String &nbsp; ----解决方案

今天在开发的时候遇到了一个问题,在此记录一下,问题的大概意思就是类型不一致不能进行强转 代码如下: rolf.setFuncd((String) rece.get("FUN_CD"));//强转 rolf.setFunid((String) rece.get("FUN_ID")); //强转 rolf.setFunnm((String) rece.get("FUN_NM")); //强转 因为我第二段的代码Orc数据库的字段类型是number,而

java中double四舍五入并设置小数点位数的问题

本文系转载,原文地址:http://blog.csdn.net/star_huang/article/details/7639267 今天遇到个需要将一个double类型的数据保留小数点后两位的问题.在网上搜寻的集中解决方案,copy来一下,备用 首先result_value是处理前的double get_double是用来保存我处理后的double   //方案一: get_double = (double)(Math.round(result_value*100)/100.0) //方案二:

java.math.BigDecimal类的用法

在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类.这两个类用于高精度计 算,其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类.下边我们介绍BigDecimal类: BigDecimal的实现利用到了BigInteger,不同的是BigDecimal加入了小数的概念.一般的float型和Double型数据只可 以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高

Java中BigDecimal的8种舍入模式是怎样的

Java中BigDecimal的8种舍入模式是怎样的?下面长沙欧柏泰克软件学院和大家一起来学习下吧:  java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是小数点后的位数.如果为负数,则将该数的非标度值乘以10的负scale次幂. 因此,BigDecimal表示的数值是(unscaledValue × 10-scale). 与之相关的还有两个类: java.ma

java中BigDecimal加减乘除基本用法

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数. 在实际应用中,需要对更大或者更小的数进行运算和处理.float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal. BigDecimal所创建的是对象,我们不能使用传统的+.-.*./等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法. 方法中的参数也必须是BigDeci

java.math.BigDecimal保留两位小数,保留小数,精确位数

http://blog.csdn.net/yuhua3272004/article/details/3075436 使用java.math.BigDecimal工具类实现 java保留两位小数问题: 方式一(四舍五入形式保留两位小数,注意模式ROUND_HALF_UP): 四舍五入   double   f   =   111231.5585;   BigDecimal   b   =   new   BigDecimal(f);   double   f1   =   b.setScale(2

Java 的BigDecimal

原文:http://blog.csdn.net/diyu122222/article/details/76887382 decimal decimal(18,0) 18是定点精度,0是小数位数. decimal(a,b) a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38. b指定小数点右边可以存储的十进制数字的最大个数.小数位数必须是从 0 到 a之间的值.默认小数位数是 0. BigDecimal Java在java.math包中提供的API类BigDecimal,用来对

BigDecimal四舍五入保留两位小数

import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class NumberFormatDemo { public static void main(String[] args) { // BigDecimal // 保留两位小数 System.out.println(new BigDecimal(0.2).setScale(2, BigDecimal

java中BigDecimal的学习

干着java的活,但是看的都是一些偏底层的东西(或者我根本就没有看),有点荒废了java的学习. 最近一直在用到一个类是BigDecimal,但都是模棱两可地在那儿用,并没有深入研究这个类的细节,感觉不能再拖了. BigDecimal,从名字来看就是进行大数运算的,不光这样,还广泛用于小数的精确运算. 当你接触到和钱有关的计算的时候,这个类还是很有用滴. 先来看一个例子 1 package com.tuhooo.bigdecimal; 2 3 /** 4 * Created by tuhooo