Java 保留两位小数的四种方法

萌新今晚用java刷题时候,发现让人保留两位小数的题,查百度之后发现有四种方法。然而我觉得我百度到的方法我都看不懂(´-ι_-`)。于是在我多方查证以及自我实验之后总结一下。


借助字符串输出

类似于C语言的输出,%.nf,n来控制小数点后四舍五入保留几位。

	double p = 3.1415926;
 	String a = String.format("%.9f",pi);
    String b = String.format("%.3f",pi);
    System.out.println("String.format处理的a = "+a);
    System.out.println("String.format处理的b = "+b);
    System.out.println("String.format处理之后pi = "+pi);

输出:
String.format处理的a = 3.141592600
String.format处理的b = 3.142
String.format处理之后pi = 3.1415926``



BigDecimal 的RoundingMode 舍位模式

//BigDecimal四舍五入法保留两位小数
import java.math.BigDecimal;
import java.math.RoundingMode;
 
public class Main {
    public static void main(String[] args) {
        double number=3.1415926;
        BigDecimal n = new BigDecimal(String.valueOf(number)).setScale(2, RoundingMode.HALF_UP);
        //详见下面补充的的RoundingMode.XXX各种用法
        System.out.println(n);
        
    }
}

输出:3.14
备注: new BigDecimal(number)值和number不一样,具体原因可以去查BigDecimal用法。new BigDecimal(String.valueOf(number))可以保证精度。


RoundingMode.XXX
  • RoundingMode.CEILING:向右取整  //简单理解ceiling 美[ˈsilɪŋ] n.最高限度
    • 3.1->3
    • -5.4->-4
  • RoundingMode.FLOOR:向左取整
    • 1.9->1
    • -5.3->-6
  • RoundingMode.DOWN:向0取整  //即负数向右取整,正数向左取整
    • 1.6->1
    • -1.6->-1
  • RoundingMode.UP:远离0取整  //即负数向左取整,正数向右取整
  • RoundingMode.HALF_DOWN :五舍六入
    • -1.5->-1
    • 1.5->1
    • 1.6->1
  • RoundingMode.HALF_UP :四舍五入
  • RoundingMode.HALF_EVEN :四舍六入五取偶  //称为“银行家舍入法”
    • 1.14->1.1
    • 1.16->1.2
    • 1.15->1.2
    • 1.25->1.2
    • 1.2354->1.24(保留2位小数)

银行家舍入法:当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。
  简单说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一


DecimalFormat方法

import java.text.DecimalFormat;
 
public class Main {
    
    public static void main(String[] args) {
    	DecimalFormat a = new DecimalFormat("0.0");   
    	DecimalFormat b = new DecimalFormat("#.#");   
    	DecimalFormat c = new DecimalFormat("000.000");   
    	DecimalFormat d = new DecimalFormat("###.###"); 
    	DecimalFormat e1 = new DecimalFormat("000000.###");  
    	DecimalFormat e2 = new DecimalFormat("000,000.###");  
    	System.out.println(a.format(12.34));   //结果12.3
    	System.out.println(b.format(12.34));   //结果12.3
    	System.out.println(c.format(12.34));   //结果012.340
    	System.out.println(d.format(12.34));   //结果12.34
    	System.out.println(e1.format(12.34));  //结果000012.34
    	System.out.println(e2.format(12.34));  //结果000,012.34
       }
  }

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字
  以上举的举个例子可以发现一些规律,但是我总结的很啰嗦,(´・ω・`)可能你们看了更糊涂,所以你们自悟吧。


升华一下

ヽ(•̀ω•́ )ゝBigDecimal和DecimalFormat到底有什么区别呢?看图自悟
  Java 保留两位小数的四种方法_第1张图片


最后(•̀ᴗ•́)و ̑̑ 我是萝莉安,一个想做程序媛的小姑娘 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄. ……如果发现写的有什么疏漏,请务必告诉我。

你可能感兴趣的:(刷题)