本文旨在记录自己每天学习和遇到的东西并记录下来
在之前的小测试中遇到需要对double型数字进行四舍五入操作
于是在网络上得到了解决方案~ (在此感谢各位前辈的记叙 呵呵)
double unit = 12.75;
System.out.println(new BigDecimal(unit).setScale(2, BigDecimal.ROUND_HALF_UP));
我之前用到的样例
public static String print(DealControl dc){
String value = "";
double total = 0;
double total_tax = 0;
for(Product p : dc.items) {
double price = p.price;
double rate = p.getRate();
int count = p.count;
double unit = price*(1+rate)*count;
total += unit;
total_tax += price*rate*count;
//new BigDecimal(unit).setScale(2,BigDecimal.ROUND_HALF_UP)用于对double型数据四舍五入操作
value += Integer.toString(count) + " " + p.name +
":" + new BigDecimal(unit).setScale(2, BigDecimal.ROUND_HALF_UP) + "\n";
}
value += "Sales Tax:" + new BigDecimal(total_tax).setScale(2, BigDecimal.ROUND_HALF_UP) + "\n";
value += "Total:" + new BigDecimal(total).setScale(2, BigDecimal.ROUND_HALF_UP);
return value;
}
下面引述了JDK5.0类说明
引用
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。
BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 MathContext 对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,ROUND_HALF_UP)中的整数字段来表示舍入模式已过时;应改为使用 RoundingMode enum(例如,RoundingMode.HALF_UP)的枚举值。
......
ROUND_HALF_UP的说明
引用
public static final int ROUND_HALF_UP
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。
setScale的说明
引用
public BigDecimal setScale(int newScale,
int roundingMode)
返回一个 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。如果该操作减少标度,则非标度值必须被除(而不是乘),并且该值可以更改;在这种情况下,将指定的舍入模式应用到除法中。
注意,由于 BigDecimal 对象是不可变的,此方法的调用不会 导致初始对象被修改,这与使用名为 setX 变异字段 X 方法的常规约定相反。相反,setScale 返回具有适当标度的对象;返回的对象不一定是新分配的。
相对于此遗留方法,应优先使用新的 setScale(int, RoundingMode) 方法
以上不懂 可以详细翻阅JDK文档
其实也是很简单的 只是平时很少用,一下子也不知道怎么用而已...
分享到:
相关推荐
通用的数据类型转换。解析double,int, datetime数据类型,不能解析返回 null,还有四舍五入方法
VB.NET支持四舍五入的计算器,界面是仿Windows计算器风格,功能方面不算很强大,只是常规的数学运算。不过本代码中的注释非常多,对学习VB.NET编程相当有帮助。以下是编写计算器时的一些参数定义: Private sts As...
js四舍五入-保留两位小数 js四舍五入-保留两位小数 js四舍五入-保留两位小数
使用java语言实现16位内存数据转化为double型
delphi7 FormatFloat 四舍五入时,某些情况下不进一,测试代码如下 procedure TForm1.FormShow(Sender: TObject); var a:double; begin a:=16.685; showmessage(formatfloat('0.00',a)); application.Terminate; ...
使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。 这样的...
开发中,需要使Decimal类型数据保留小数点后的两位小数且不需要进行四舍五入操作,即直接截取小数点后面的两位小数即可。例如:1.245M –> 1.24,而不是1.25 使用Decimal.Round()方法可以实现保留Decimal类型数据...
c++ 中 数字转换为大写 在vs中开发 输入的为double型
Java Double相加出现的怪事,浮点运算不精确问题
C# 中没有四舍五入函数,程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法 Bankers rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有...
1.采用两种方式实现数据修约【①IEEE754的银行家算法、②传统的四舍五入】。 2.实现Decimal、double、string三种数据类型的数据修约。 3.实现了指定小数位、指定整数位的数据修约。
主要介绍了java对double数组排序示例,代码简单,下面我们直接上代码,需要的朋友可以参考下
Java Double 类型比较大小 不能直接使用 >0
JAVA转byte[]为int,long,double
如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列...
本文实例讲述了C#编程实现四舍五入、向上及下取整的方法。分享给大家供大家参考,具体如下: 在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采用的是“四舍六入五成双”的方法,如下面的例子,就是用...
C#中的round函数实际上不是真正的四舍五入函数,一般的程序设计语言的round函数也都不是四舍五入函数,而是银行家舍入法函数,也就是“四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要...
java double:双精度浮点型
提供double的精准加减乘除,很方便,可保留多为小数
在判断数是否为double时,会用到小数点处理的问题,一个小数点还是多个小数点