• Java 舍入模式 数字的格式化


    舍入模式:

    UP
    向远离0的方向舍入
    始终对非零舍弃部分前面的数字加 1。此舍入模式始终不会减少计算值的绝对值。
    例如:1.6 → 2
          -1.6 → -2
          1.1 → 2
          -1.1 → -2


    DOWN
    向零方向舍入
    此舍入模式始终不会增加计算值的绝对值。
    例如:1.6 → 1
          -1.6 → -1
          1.1 → 1
          -1.1 → -1


    CEILING
    向正无穷方向舍入,此舍入模式始终不会减少计算值。
    例如:1.6 → 2
          -1.6 → -1


    FLOOR
    向负无穷方向舍入,此舍入模式始终不会增加计算值。
    例如:1.6 → 1
          -1.6 → -2


    HALF_UP
    向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入,此舍入模式就是通常学校里讲的四舍五入。
    例如:1.6 → 2
          -1.6 → -2
          1.5 → 2
          -1.5 → -2


    HALF_DOWN
    向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入
    例如:1.6 → 2
          -1.6 → -2
          1.4 → 1
          -1.4 → -1
          1.5 → 1
          -1.5 → -1


    HALF_EVEN
    向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
    如果舍弃部分左边的数字为奇数,则舍入行为同 RoundingMode.HALF_UP ;如果为偶数,则舍入行为同 RoundingMode.HALF_DOWN
    例如:1.6 → 2
          -1.6 → -2
          2.5 → 2
          -2.5 → -2
          5.5 → 6
          -5.5 → -6


    UNNECESSARY
    计算结果是精确的,不需要舍入模式

    数字的格式化:

     1     public static void main(String[] args) throws ParseException {
     2         // NumberFormat 逗号分隔
     3         double num1 = 20140426.193;
     4         NumberFormat format = NumberFormat.getInstance(Locale.CHINESE);
     5         System.out.println(format.format(num1)); // 20,140,426.193
     6 
     7         // NumberFormat 百分数
     8         num1 = 0.2;
     9         format = NumberFormat.getPercentInstance();
    10         System.out.println(format.format(num1)); // 20%
    11         
    12         // NumberFormat 货币
    13         num1 = 100;
    14         format = NumberFormat.getCurrencyInstance(Locale.JAPAN);
    15         System.out.println(format.format(num1)); // ¥100    
    16         
    17         // DecimalFormat #代表该位置上数字可有可无,0代表该位置的数字不存在的话补零
    18         num1 = 20140426.193;
    19         DecimalFormat f = new DecimalFormat();
    20         f.applyPattern("#########.0000");
    21         System.out.println(f.format(num1)); // 20140426.1930
    22         
    23         // DecimalFormat 默认四舍五入
    24         f.applyPattern("#########.0");
    25         System.out.println(f.format(num1)); // 220140426.2
    26         
    27         // DecimalFormat 每三位以逗号进行分隔
    28         f.applyPattern(",###");
    29         System.out.println(f.format(num1)); // 20,140,426
    30         
    31         // DecimalFormat 科学计数法
    32         f.applyPattern("#.###E0");
    33         System.out.println(f.format(num1)); // 2.014E7
    34 
    35         // 百分数
    36         num1 = 0.15;
    37         f.applyPattern("##%");
    38         System.out.println(f.format(num1)); // 15%
    39         
    40         // 将格式嵌入文本
    41         num1 = 15.2;
    42         f.applyPattern("现在的时间是下午##点");
    43         System.out.println(f.format(num1)); // 现在的时间是下午15点
    44         
    45         // 将带有格式化的字符数字复原
    46         f.applyPattern("#,###.#");
    47         System.out.println(f.parse("15.4"));
    48         System.out.println(f.parse("201,415.46"));
    49         
    50         // 精度为2,向远离0的方向舍入
    51         MathContext context = new MathContext(2, RoundingMode.UP);
    52         BigDecimal num2 = new BigDecimal("1");
    53         System.out.println(num2.divide(new BigDecimal(3), context));
    54         // 精度为2,向零方向舍入 
    55         context = new MathContext(2, RoundingMode.DOWN);
    56         System.out.println(num2.divide(new BigDecimal(3), context));
    57         // 精度为2,向正无穷方向舍入
    58         context = new MathContext(2, RoundingMode.CEILING);
    59         System.out.println(num2.divide(new BigDecimal(3), context));
    60         // 精度为2,向负无穷方向舍入
    61         context = new MathContext(2, RoundingMode.FLOOR);
    62         System.out.println(num2.divide(new BigDecimal(3), context));
    63         // 精度为2,向(距离)最近的一边舍入(四舍五入),如果两边(的距离)相等,向上舍入
    64         context = new MathContext(2, RoundingMode.HALF_UP);
    65         System.out.println(num2.divide(new BigDecimal(3), context));
    66         // 精度为2,向(距离)最近的一边舍入,如果两边(的距离)相等,向下舍入
    67         context = new MathContext(2, RoundingMode.HALF_UP);
    68         System.out.println(num2.divide(new BigDecimal(3), context));
    69         // 精度为2,向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
    70         context = new MathContext(2, RoundingMode.HALF_EVEN);
    71         System.out.println(num2.divide(new BigDecimal(3), context));
    72     }
  • 相关阅读:
    csharp:Validate email address using C#
    Sql:SQL Server CREATE SEQUENCE statement
    机器学习实战---SVD简化数据
    机器学习实战---PCA降维
    机器学习实战---使用FP-growth算法来高效发现频繁项集
    机器学习实战---使用Apriori算法进行关联分析
    机器学习实战---集成学习AdaBoost算法
    支持向量机核函数的实现
    支持向量机SMO算法实现(注释详细)
    帧缓冲
  • 原文地址:https://www.cnblogs.com/keyiei/p/3611858.html
Copyright © 2020-2023  润新知