java中保留两位小数的方法
阅读原文时间:2023年07月08日阅读:1

1.BigDecimal的setScale

// RoundingMode 舍入模式:
// 1.UP/DOWN ->基准为数字0;
// 2.CEILING/FLOOR ->基准为正负无穷大;
// 3.HALF_UP -> 通常学校里讲的四舍五入[去符号四舍五入,再加回符号];
// 4.HALF_DOWN 向数字方向舍入的舍入模式, 如果与两个相邻数字的距离相等,则向下舍入。 如果被舍弃部分 > 0.5,则舍入行为同
// RoundingMode.UP;否则舍入行为同 RoundingMode.DOWN。
BigDecimal decimal = new BigDecimal(123456.78101);
BigDecimal ret = decimal.setScale(2, RoundingMode.HALF_DOWN);
System.out.println(ret); //

2.DecimalFormat的format

// DecimalFormat "#."后边要有几位,就可以写几个0
DecimalFormat df = new DecimalFormat("#.000");
String dbStr = df.format(123456.78951);
System.out.println(dbStr); // 123456.790

3.String的format

double d = 3.1455926;
String str = "Hello";
String result = String.format("%1$.2f%2$6s",d,str);
System.out.println(result);//3.15 Hello

下面蓝色是String的format的参照JDK的索引,还是没看清楚,先贴这里 -----------------------------------

格式字符串语法

产生格式化输出的每个方法都需要格式字符串参数列表。格式字符串是一个 String,它可以包含固定文本以及一个或多个嵌入的格式说明符。请考虑以下示例:

Calendar c = …;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

此格式字符串是 format 方法的第一个参数。它包含三个格式说明符 "%1$tm"、"%1$te" 和 "%1$tY",它们指出应该如何处理参数以及在文本的什么地方插入它们。格式字符串的其余部分是包括 "Dukes Birthday: " 和其他任何空格或标点符号的固定文本。 参数列表由传递给位于格式字符串之后的方法的所有参数组成。在上述示例中,参数列表的大小为 1,由对象 Calendar c 组成。

  • 常规类型、字符类型和数值类型的格式说明符的语法如下:

    %[argument_index$][flags][width][.precision]conversion

    可选的 argument_index 是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。

    可选 flags 是修改输出格式的字符集。有效标志集取决于转换类型。

    可选 width 是一个非负十进制整数,表明要向输出中写入的最少字符数。

    可选 precision 是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。

    所需 conversion 是一个表明应该如何格式化参数的字符。给定参数的有效转换集取决于参数的数据类型。

  • 用来表示日期和时间类型的格式说明符的语法如下:

    %[argument_index$][flags][width]conversion

    可选的 argument_indexflagswidth 的定义同上。

    所需的 conversion 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。第二个字符表明所使用的格式。这些字符类似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的字符。

  • 与参数不对应的格式说明符的语法如下:

    %[flags][width]conversion

    可选 flagswidth 的定义同上。

    所需的 conversion 是一个表明要在输出中所插内容的字符。