java中金額元轉萬元工具類的實例

我就廢話不多說瞭,大傢還是直接看代碼吧~

public static void main(String[] args) {
  // 具體的金額(單位元)
  String value = "88000067898";
  BigDecimal bigDecimal = new BigDecimal(value);
  // 轉換為萬元(除以10000)
  BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
  // 保留兩位小數
  DecimalFormat formater = new DecimalFormat("0");
  // 四舍五入
  formater.setRoundingMode(RoundingMode.HALF_UP); 
  // 格式化完成之後得出結果
  String formatNum = formater.format(decimal);
  System.out.println(formatNum);
 }
 /**元轉萬元且四舍五入取整*/
 public static String getNumberWan(String value) {
  BigDecimal bigDecimal = new BigDecimal(value);
  // 轉換為萬元(除以10000)
  BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
  // 保留兩位小數
  DecimalFormat formater = new DecimalFormat("0");
  // 四舍五入
  formater.setRoundingMode(RoundingMode.HALF_UP); 
  // 格式化完成之後得出結果
  String rs = formater.format(decimal);
  return rs;
 }
 
 /**元轉萬元且保留兩位小數並四舍五入*/
 public static String getNumberWanTwo(String value) {
  BigDecimal bigDecimal = new BigDecimal(value);
  // 轉換為萬元(除以10000)
  BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
  // 保留兩位小數
  DecimalFormat formater = new DecimalFormat("0");
  // 四舍五入
  formater.setRoundingMode(RoundingMode.HALF_UP); 
  // 格式化完成之後得出結果
  String rs = formater.format(decimal);
  return rs;
 }

補充:用java實現將金額由數字轉為中文的數字金額

寫一個金額由數字轉為中文的數字金額

例如:

123123.12轉為壹拾貳萬叁仟壹佰貳拾叁元壹角貳分

由於是從開發過程中代碼直接copy過來的,有一部分可以忽略,新人剛剛工作,寫的不好,請多指正

import java.util.Scanner;
public class Test {
  //數字單位
  private static final String[] NUMBERS_UNITS= {"拾","佰","仟","萬"};
  public static void main(String[] args) {
    Test st=new Test();
    Scanner scanner=new Scanner(System.in);
    System.out.println("請輸入金額:");
    //獲取前端傳遞過來的金額數字
    String money=scanner.nextLine();
    //1.判斷是否為null
    st.isNull(money);
    //2.判斷是否有非法字符
    st.isIllegal(money);
    //3.判斷是否超過限額
    String[] array=st.isBeyondMax(money);
    //4.整數位字符轉換
    StringBuffer chineseInt=st.convertInt(array[0]);
    //5.判斷有無小數位
    if(array.length==2) {
      //6.有則進行小數位字符轉換
      StringBuffer chineseDec=st.convertDec(array[1]);
      //7.拼接整數和小數位
      chineseInt=chineseInt.append(chineseDec);
    }
    //8.將轉為大寫的金額設置回總線
    System.out.println(chineseInt);
  }
  /**
   * 將小數位的金額數字轉化為中文大寫
   * @param string 金額數字
   * @return 轉為中文的金額數字
   */
  private StringBuffer convertDec(String string) {
    StringBuffer str=convert(string);
    switch(str.length()) {
      case 1:
        str.append("角");
        break;
      case 2:
        str.append("分");
        str.insert(1, "角");
        break;
    }
    return str;
  }
  /**
   * 將整數位的金額數字對應轉化為中文大寫
   * @param string 金額數字
   * @return 轉為中文的金額數字
   */
  private StringBuffer convertInt(String string) {
    StringBuffer str=convert(string);
    int length=str.length()-1;
    for (int i = 0,j=str.length()-1; i < length; i++,j--) {
      int v=i%4;
      System.out.println("i:"+i+" j:"+j+" v:"+v+" "+str.toString());
      str.insert(j, NUMBERS_UNITS[v]);
    }
    str.append("元");
    return str;
  }
  /**
   * 循環整個字符串,替換字符
   * @param string 要替換的字符串
   * @return 替換好的字符
   */
  private StringBuffer convert(String string) {
    StringBuffer str=new StringBuffer(string);
    for (int i = 0; i < str.length(); i++) {
      str.replace(i, i+1,replaceCharacter(str.substring(i, i+1)));
    }
    return str;
  }
  /**
   * 將給定的數字字符替換為對應的中文數字字符
   * @param string 數字字符
   * @return 中文數字字符
   */
  private String replaceCharacter(String string) {
    switch(string) {
      case "0":
        string="零";
        break;
      case "1":
        string="壹";
        break;
      case "2":
        string="貳";
        break;
      case "3":
        string="叁";
        break;
      case "4":
        string="肆";
        break;
      case "5":
        string="伍";
        break;
      case "6":
        string="陸";
        break;
      case "7":
        string="柒";
        break;
      case "8":
        string="捌";
        break;
      case "9":
        string="玖";
        break;
    }
    return string;
  }
  /**
   * 檢測傳入金額字符是否為空
   * @param money 金額字符
   */
  private void isNull(String money) {
    if(money == null) {
      //拋出異常
    }
  }
  /**
   * 檢測傳入金額字符是否符合條件
   * @param money 金額字符
   */
  private void isIllegal(String money) {
    if(!money.matches("\\d+.?\\d*")) {
      //拋出異常
    }
  }
  /**
   * 檢測傳入金額字符是否超出最大值
   * @param money 金額字符
   * @return 返回拆分的金額數字
   */
  private String[] isBeyondMax(String money) {
    String[] array=money.split("\\.");
    //整數位不能超過9位,小數位不能超過2為
    if(array[0].length()>9 || (array.length>1 &&array[1].length()>2)) {
      //拋出異常
    }
    return array;
  }
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: