java.text.NumberFormat保留小数点
一、概述
NumberFormat是抽象类,可以通过其本身提供的getxxxInstance()静态方法获得实例对象。
getxxxInstance()本质是创建了一个DecimalFormat对象,该对象默认使用的是进位方式是RoundingMode.HALF_EVEN,此舍入模式也称为“银行家算法”,主要在美国使用。
银行家算法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
二、demo
import java.text.NumberFormat; public class Test1 { public static void main(String[] s){ double number = 12345.67321; NumberFormat numberFormat = NumberFormat.getCurrencyInstance(); System.out.println(numberFormat.format(number));//¥12,345.67 货币格式的实例化对象,若没有设置小数点允许最大位数,默认是2位 numberFormat.setMaximumFractionDigits(4); //设置小数点允许最大位数4位,超出部分按RoundingMode.HALF_EVEN模式进位 System.out.println(numberFormat.format(number));//¥12,345.6732 numberFormat.setRoundingMode(RoundingMode.HALF_UP); //设置进位方式为四舍五入 System.out.println(numberFormat.format(number));//¥12,345.6732 NumberFormat numberFormat1 = NumberFormat.getInstance(); System.out.println(numberFormat1.format(number));//12,345.673 数字格式的实例化对象,若没有设置小数点允许最大位数,默认是3位 numberFormat1.setMinimumIntegerDigits(6);//设置整数部分最小允许为6位,不足左补0, System.out.println(numberFormat1.format(number));// 012,345.673 numberFormat1.setMaximumIntegerDigits(3);//设置整数部分最大允许为3位,超出部分截取掉 System.out.println(numberFormat1.format(number));// 345.673 //getxxxInstance()本质是创建了一个DecimalFormat对象,该对象默认使用的是进位方式是RoundingMode.HALF_EVEN,此舍入模式也称为“银行家算法”,主要在美国使用。 //银行家算法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一 NumberFormat numberFormat2 = NumberFormat.getIntegerInstance(); System.out.println(numberFormat2.format(number));//12,346 此处有四舍六入的问题 } }
简单示例:
public static void main(String[] args) throws Exception { java.text.NumberFormat nf = java.text.NumberFormat.getInstance(); nf.setGroupingUsed(false); nf.setMaximumFractionDigits(2); double d = (double) 1 * 100 / 3; d = Double.parseDouble(nf.format(d)); log.info("d => {}", d); int i = 1 * 100/3; log.info("i => {}", i); }
    有些事情,没经历过不知道原理,没失败过不明白奥妙,没痛苦过不了解真谛。临渊羡鱼,不如退而结网!
                    
                
                
            
        
浙公网安备 33010602011771号