黑马程序员技术交流社区
标题:
java.text.NumberFormat 格式化数值 四舍五入问题, 求解 [
[打印本页]
作者:
che201311
时间:
2013-11-23 22:01
标题:
java.text.NumberFormat 格式化数值 四舍五入问题, 求解 [
为什么 333.525 被四舍了 ,而不是五入呢 ?
public static void main(String[] args)
{
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumIntegerDigits(4);
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(333.525));
System.out.println(nf.format(333.52500001));
}
输出:
0,333.52
0,333.53
作者:
ysunday
时间:
2013-11-23 22:28
本帖最后由 ysunday 于 2013-11-23 22:30 编辑
需要指定舍入模式
NumberFormat nf = NumberFormat.getInstance();
nf.setRoundingMode(RoundingMode.HALF_UP);//这个是指定四舍五入,默认是下边的5
源码NumberFormat的RoundingMode决定着处理方式,默认为 ROUND_HALF_EVEN , 下面是几个参数的解释 :
1. ROUND_CEILING
如果BigDecimal是正的,则做ROUND_UP操作;如果为负,则做ROUND_DOWN操作。
2. ROUND_DOWN
从不在舍弃(即截断)的小数之前增加数字。
3. ROUND_FLOOR
如果BigDecimal为正,则作ROUND_UP;如果为负,则作ROUND_DOWN。
4. ROUND_HALF_DOWN
若舍弃部分>.5,则作ROUND_UP;否则,作ROUND_DOWN。
5. ROUND_HALF_EVEN
如果舍弃部分左边的数字为奇数,则作ROUND_HALF_UP;如果它为偶数,则作 ROUND_HALF_DOWN 。
6. ROUND_HALF_UP
若舍弃部分>=.5,则作ROUND_UP;否则,作ROUND_DOWN。
7. ROUND_UNNECESSARY
该“伪舍入模式”实际是指明所要求的操作必须是精确的,,因此不需要舍入操作。
8. ROUND_UP
总是在非0舍弃小数(即截断)之前增加数字。
详情请看这里http://bbs.csdn.net/topics/390467107
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2