随笔 - 755  文章 - 0 评论 - 33 阅读 - 135万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

一、舍入模式RoundingMode

1、舍入模式RoundingMode为截断Down

复制代码
public static void main(String[] args) {
        double num = 11.256;
        DecimalFormat df = new DecimalFormat("#.##"); // 格式化为两位小数
        //指定RoundingMode舍入模式
        df.setRoundingMode(RoundingMode.DOWN); // RoundingMode.DOWN表示去掉一位,即截断
        String str = df.format(num);
        System.out.println(str); //11.25
        double formatNum = Double.parseDouble(str);
        System.out.println(formatNum); // 11/25
    }
复制代码

2、舍入模式RoundingMode为四舍五入HALF_UP

复制代码
public static void main(String[] args) {
        double num = 11.256;
        DecimalFormat df = new DecimalFormat("#.##"); // 格式化为两位小数
        //指定RoundingMode舍入模式
        df.setRoundingMode(RoundingMode.HALF_UP); // 四舍五入
        String str = df.format(num);
        System.out.println(str); // 11.26
        double formatNum = Double.parseDouble(str);
        System.out.println(formatNum); // 11.26
    }
复制代码

3、舍入模式RoundingMode为“始终对非零舍弃部分前面的数字加1” UP

复制代码
public static void main(String[] args) {
        double num = 11.254;
        DecimalFormat df = new DecimalFormat("#.##"); // 格式化为两位小数
        //指定RoundingMode舍入模式
        df.setRoundingMode(RoundingMode.UP); // 始终对非零舍弃部分前面的数字加 1
        String str = df.format(num);
        System.out.println(str); // 11.26
        double formatNum = Double.parseDouble(str);
        System.out.println(formatNum); // 11.26
    }
复制代码

4、HALF_EVEN -----DecimalFormat默认的RoundingMode为RoundingMode.HALF_EVEN,也称为“银行家舍入法”,主要在美国使用。四舍六入,五分向相邻的偶数舍入。
以下例子为保留小数点1位,那么这种舍入方式下的结果。

1.15–>1.2 1.25–>1.2

5、HALF_DOWN — 五舍六入

2.5 —> 2
2.6 —> 3

二、占位符

1、0表示数字占位符,实际位数不够时补零
比实际数字的位数多,不足的地方用0补上

new DecimalFormat(“00.00”).format(3.14) //结果:03.14
new DecimalFormat(“0.000”).format(3.14) //结果: 3.140
new DecimalFormat(“00.000”).format(3.14) //结果:03.140

整数部分比实际数字的位数少,整数部分不改动。小数部分比实际数字的位数少,根据小数部分占位符数量保留小数。

new DecimalFormat(“0.000”).format(13.146) //结果:13.146
new DecimalFormat(“00.00”).format(13.146) //结果:13.15
new DecimalFormat(“0.00”).format(13.146) //结果:13.15

2、#表示数字占位符,实际位数不够时不补零

比实际数字的位数多,不变

new DecimalFormat("##.##").format(3.14) //结果:3.14
new DecimalFormat("#.###").format(3.14) //结果: 3.14
new DecimalFormat("##.###").format(3.14) //结果:3.14

整数部分比实际数字的位数少,整数部分不改动。小数部分比实际数字的位数少,根据小数部分占位符数量保留小数。

new DecimalFormat("#.###").format(13.146) //结果:13.146
new DecimalFormat("##.##").format(13.146) //结果:13.15
new DecimalFormat("#.##").format(13.146) //结果:13.15

 



感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接
posted on   周文豪  阅读(499)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示