-
传统的四舍五入BigDecimal类,BUG?20
想要一个跟我们传统学的四舍五入的方法,网上多说下面的方法可以用,我测了下,发现有很多问题啊。当所要求的小数位小于等于1位时没错误,但当小数位2位以上就有问题了,下面是测试用例,及结果。测试发现当所要小数位为2位时,遇到偶数进1,奇数不进。十位数不位空时也是如此。 谁说下这个啥回事?顺便求其他传统格式化方法。DecimalFormat这个类也不行,奇数进1偶数不进的public class test { public static void main(String[] args) { double a = 1.5; double b = 2.5; double c = 1.35; double d = 2.35; double e = 2.355; double f = 2.345; double g= 12.35; BigDecimal bigA =new BigDecimal(a).setScale(0, BigDecimal.ROUND_HALF_UP); BigDecimal bigB =new BigDecimal(b).setScale(0, BigDecimal.ROUND_HALF_UP); BigDecimal bigC =new BigDecimal(c).setScale(1, BigDecimal.ROUND_HALF_UP); BigDecimal bigD =new BigDecimal(d).setScale(1, BigDecimal.ROUND_HALF_UP); BigDecimal bigE=new BigDecimal(e).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal bigF=new BigDecimal(f).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal bigG=new BigDecimal(g).setScale(1, BigDecimal.ROUND_HALF_UP); System.out.println("test A:"+bigA.doubleValue()); System.out.println("test B:"+bigB.doubleValue()); System.out.println("test C:"+bigC.doubleValue()); System.out.println("test D:"+bigD.doubleValue()); System.out.println("test E:"+bigE.doubleValue()); System.out.println("test F:"+bigF.doubleValue()); System.out.println("test G:"+bigG.doubleValue()); } }
输出结果: 想要的结果
test A:2.0 2.0
test B:3.0 3.0
test C:1.4 1.4
test D:2.4 2.4
test E:2.35 X 2.36
test F:2.35 2.35
test G:12.3 X 12.42010年10月13日 14:59
3个答案 按时间排序 按投票排序
-
采纳的答案
你定义的方式有问题。
double g= 12.35; 定义了一个g=12.34444444444444449,假如是这个数
new BigDecimal(g) g还是12.34444444444444449
new BigDecimal(g).setScale(1, BigDecimal.ROUND_HALF_UP); 12.34
正确的定义方式是使用字符串构造函数
new BigDecimal("12.35").setScale(1, BigDecimal.ROUND_HALF_UP)2010年10月13日 15:24
-
public static double round(double value,int scale){
if(scale<0){
throw new IllegalArgumentException(
The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(value));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
试试上面的方法吧!!!2010年10月13日 16:34
相关推荐
Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE...
BigDecimal类,常用方法是用介绍
BigDecimal工具类.docx
java代码-BigDecimal 四舍五入保留2位小数. 金额从单位分转成单位元
1.采用两种方式实现数据修约【①IEEE754的银行家算法、②传统的四舍五入】。 2.实现Decimal、double、string三种数据类型的数据修约。 3.实现了指定小数位、指定整数位的数据修约。
alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10").subtract(new BigDecimal("3E+10"))); //* alert(new BigDecimal("10").multiply(new BigDecimal("3E+10"))); // / ...
BigInteger.java BigDecimal.java 文件 源代码
js中操作Bigdecimal类,包含所有java中bigdecimal的操作,加减乘除,四舍五入,比较等。
javascript的数值精确计算类bigdecimal,改编自java的bigdecimal
提供(相对)精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位,以后的数字四舍五入 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入 提供精确的小数位四...
主要介绍了Java中BigDecimal类的简单用法,是Java应用程序开发中非常实用的技巧,本文以实例形式对此进行了简单的分析,需要的朋友可以参考下
java丢失精度,bigdecimal加减乘除
Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...
java.math.BigDecimal 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等
BigDecimal的计算
复杂的BigDecimal计算,需要开方的式子,可输入结果精确位数
本版中只有一个用于生产环境的文件:BigDecimal-all-last.min.js,大小为26K,如果WEB服务器打开GZIP压缩,可以减小至7K,如需完整版本请移步至:http://download.csdn.net/detail/aquaqu2009/4575230 简单用法: ...
BigDecimal向Double转换
BigDecimal运算封装,里面封装了Integer和BigDecimal的"加减乘除法运算封装
在实际应用中,需要对更大或者更小的数进行运算和处理。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确...本文将介绍Java中的大数类BigDecimal及其八种舍入模式,有需要的可以参考借鉴。