java-BigDecimal 四舍五入结果不一致

问题描述

BigDecimal 四舍五入结果不一致
BigDecimal number=new BigDecimal(18.9045613);
System.out.print(""RoundingMode四舍五入: "" + number.setScale(2RoundingMode.UP) ); //18.91
System.out.print(""BigDecimal四舍五入: "" + number.setScale(2BigDecimal.ROUND_HALF_UP) );//18.90

为什么这两种四舍五入获得的值不一样?

解决方案

上面的不是4舍5入。是无论值多少,都会进1.

解决方案二:
http://wenku.baidu.com/link?url=8JI4IaCj1LAkJqentb6w9tETPWZvM5BvxOc_8M4NYKK-TGwifTwUKAPNLalI21tc9Bq9a4KIE-aFPlLHwOTWq71vcnePDvhCyDPrmpx9nDi

解决方案三:
UP public static final RoundingMode UP

远离零方向舍入的舍入模式。始终对非零舍弃部分前面的数字加 1。注意,此舍入模式始终不会减少计算值的绝对值

时间: 2024-12-20 17:23:36

java-BigDecimal 四舍五入结果不一致的相关文章

java BigDecimal四舍五入结果错误的bug

问题描述 java BigDecimal四舍五入结果错误的bug for (double i = 511.55; i < 2050.55; i++) { BigDecimal bd = new BigDecimal(i); bd =bd.setScale(1, BigDecimal.ROUND_HALF_UP); System.out.println(bd.doubleValue()); } 512-2048 之内的值 四舍五入不对 全部舍位了.没有进位 是不是电脑的问题? ROUND_HALF

java bigdecimal保存到mysql数据库不保留小数点后位数问题

问题描述 java bigdecimal保存到mysql数据库不保留小数点后位数问题 单元测试执行insert方法: set值如下: sp.setMaximumDd(new BigDecimal("-0.1109")); sp.setWinningPct(new BigDecimal("0.6217")); sp.setWinningMonth(new BigDecimal("0.80")); 插入到mysql数据库中值为什么变成了这样: ![图

Java BigDecimal类用法详解_java

1.引言 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合.但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦. 2.BigDecimal简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成.如果为零或正数

BigDecimal四舍五入的问题?

问题描述 1 . System.out.println(new BigDecimal(1.555).setScale(2, BigDecimal.ROUND_HALF_UP));输出:1.552 . System.out.println(new BigDecimal(0.555).setScale(2, BigDecimal.ROUND_HALF_UP));输出:0.563 . System.out.println(new BigDecimal(1.556).setScale(2, BigDec

MemCached时java和.net数据类型不一致

问题描述 有人使用过MemCached吗?我在java中调用set方式写入数据,在.net中调用get方式获取数据.但现在发现java写入的数据并不能被.net获取到?网上说是数据类型不一致导致的,但没有给出具体的解决方案.哪位大侠知道如何解决?真诚请教! 解决方案 解决方案二:你存的什么类型的?没在.NET上用过~解决方案三:字符串类型解决方案四:java之间或者.net之间都没问题,但java和.net相结合就出问题了

Java BigDecimal类的使用和注意事项_java

BigDecimal简介 JDK文档(中文)中的解释如下: 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成.如果为零或正数,则标度是小数点后的位数.如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂.因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale). 具体解释 1."BigDecimal 对象的值是不可变的".这点在BigDecimal 对象的运

怪异问题!sql在pl/sql中执行结果与java jdbc执行结果不一致

问题描述 做一查询系统(struts2+myeclipse+tomcat+oracle9),一般先在pl/sql中测试sql语句,无问题后在action中使用oracle thin模式连接数据库,执行sql语句,然后将查询结果存入HashMap后输出至jsp页面.出现如下怪异问题:1.在pl/sql中测试sql语句时结果正常.结果中有6个字段,其中两个字段为count()函数统计出的数值.2.将在pl/sql中测试过的sql语句写入struts2的action中,通过jdbc thin模式执行,

JAVA BigDecimal的相加

之前很少使用这样的一个对象BigDecimal,今天在改需求的时候遇到了,结果坑爹的怎么相加最后都为零. 代码如下: BigDecimal totalAmount = new BigDecimal(0); totalAmount.add(new BigDecimal(5000)); System.out.println(totalAmount); 输出结果为0. 查资料后才知道,要这样写才行:   BigDecimal totalAmount = new BigDecimal(0); total

java的四舍五入算法

粗力度的四舍五入为整数 1 package math; 2 3 public class MathRoundTest { 4 /** 5 * Math类中提供了三个与取整有关的方法:ceil,floor,round, 6 * 这些方法的作用于它们的英文名称的含义相对应,例如:ceil的英文意义是天花板,该方法就表示向上取整, 7 * Math.ceil(11.3)的结果为12,Math.ceil(-11.6)的结果为-11:floor的英文是地板, 8 * 该方法就表示向下取整,Math.flo