java中金額元轉(zhuǎn)萬元工具類的實(shí)例
我就廢話不多說了,大家還是直接看代碼吧~
public static void main(String[] args) {
// 具體的金額(單位元)
String value = "88000067898";
BigDecimal bigDecimal = new BigDecimal(value);
// 轉(zhuǎn)換為萬元(除以10000)
BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
// 保留兩位小數(shù)
DecimalFormat formater = new DecimalFormat("0");
// 四舍五入
formater.setRoundingMode(RoundingMode.HALF_UP);
// 格式化完成之后得出結(jié)果
String formatNum = formater.format(decimal);
System.out.println(formatNum);
}
/**元轉(zhuǎn)萬元且四舍五入取整*/
public static String getNumberWan(String value) {
BigDecimal bigDecimal = new BigDecimal(value);
// 轉(zhuǎn)換為萬元(除以10000)
BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
// 保留兩位小數(shù)
DecimalFormat formater = new DecimalFormat("0");
// 四舍五入
formater.setRoundingMode(RoundingMode.HALF_UP);
// 格式化完成之后得出結(jié)果
String rs = formater.format(decimal);
return rs;
}
/**元轉(zhuǎn)萬元且保留兩位小數(shù)并四舍五入*/
public static String getNumberWanTwo(String value) {
BigDecimal bigDecimal = new BigDecimal(value);
// 轉(zhuǎn)換為萬元(除以10000)
BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
// 保留兩位小數(shù)
DecimalFormat formater = new DecimalFormat("0");
// 四舍五入
formater.setRoundingMode(RoundingMode.HALF_UP);
// 格式化完成之后得出結(jié)果
String rs = formater.format(decimal);
return rs;
}
補(bǔ)充:用java實(shí)現(xiàn)將金額由數(shù)字轉(zhuǎn)為中文的數(shù)字金額
寫一個金額由數(shù)字轉(zhuǎn)為中文的數(shù)字金額
例如:
123123.12轉(zhuǎn)為壹拾貳萬叁仟壹佰貳拾叁元壹角貳分
由于是從開發(fā)過程中代碼直接copy過來的,有一部分可以忽略,新人剛剛工作,寫的不好,請多指正
import java.util.Scanner;
public class Test {
//數(shù)字單位
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("請輸入金額:");
//獲取前端傳遞過來的金額數(shù)字
String money=scanner.nextLine();
//1.判斷是否為null
st.isNull(money);
//2.判斷是否有非法字符
st.isIllegal(money);
//3.判斷是否超過限額
String[] array=st.isBeyondMax(money);
//4.整數(shù)位字符轉(zhuǎn)換
StringBuffer chineseInt=st.convertInt(array[0]);
//5.判斷有無小數(shù)位
if(array.length==2) {
//6.有則進(jìn)行小數(shù)位字符轉(zhuǎn)換
StringBuffer chineseDec=st.convertDec(array[1]);
//7.拼接整數(shù)和小數(shù)位
chineseInt=chineseInt.append(chineseDec);
}
//8.將轉(zhuǎn)為大寫的金額設(shè)置回總線
System.out.println(chineseInt);
}
/**
* 將小數(shù)位的金額數(shù)字轉(zhuǎn)化為中文大寫
* @param string 金額數(shù)字
* @return 轉(zhuǎn)為中文的金額數(shù)字
*/
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;
}
/**
* 將整數(shù)位的金額數(shù)字對應(yīng)轉(zhuǎn)化為中文大寫
* @param string 金額數(shù)字
* @return 轉(zhuǎn)為中文的金額數(shù)字
*/
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;
}
/**
* 循環(huán)整個字符串,替換字符
* @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;
}
/**
* 將給定的數(shù)字字符替換為對應(yīng)的中文數(shù)字字符
* @param string 數(shù)字字符
* @return 中文數(shù)字字符
*/
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 返回拆分的金額數(shù)字
*/
private String[] isBeyondMax(String money) {
String[] array=money.split("\\.");
//整數(shù)位不能超過9位,小數(shù)位不能超過2為
if(array[0].length()>9 || (array.length>1 &&array[1].length()>2)) {
//拋出異常
}
return array;
}
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
SpringBoot 任務(wù)調(diào)度動態(tài)設(shè)置方式(不用重啟服務(wù))
這篇文章主要介紹了SpringBoot 任務(wù)調(diào)度 動態(tài)設(shè)置方式(不用重啟服務(wù)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
java 讀取系統(tǒng)Properties代碼實(shí)例
這篇文章主要介紹了java 讀取系統(tǒng)Properties代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
Mybatis如何傳入多個參數(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Mybatis如何傳入多個參數(shù)的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
SpringMvc3+extjs4實(shí)現(xiàn)上傳與下載功能
這篇文章主要為大家詳細(xì)介紹了SpringMvc3+extjs4實(shí)現(xiàn)上傳與下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
關(guān)于Spring Boot動態(tài)權(quán)限變更問題的實(shí)現(xiàn)方案
這篇文章主要介紹了Spring Boot動態(tài)權(quán)限變更實(shí)現(xiàn)的整體方案使用session作為緩存,結(jié)合AOP技術(shù)進(jìn)行token認(rèn)證和權(quán)限控制,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06
java動態(tài)綁定和靜態(tài)綁定用法實(shí)例詳解
這篇文章主要介紹了java動態(tài)綁定和靜態(tài)綁定用法,結(jié)合實(shí)例形式詳細(xì)分析了java動態(tài)綁定與靜態(tài)綁定相關(guān)概念、原理、實(shí)現(xiàn)方法及使用注意事項,需要的朋友可以參考下2019-05-05
為spring get請求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰)
這篇文章主要介紹了為spring get請求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
SpringBoot 統(tǒng)一異常處理的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot 統(tǒng)一異常處理的實(shí)現(xiàn)示例,目的就是在異常發(fā)生時,盡可能地減少破壞,下面就來介紹一下,感興趣的可以了解一下2024-07-07
Java 8 中 Map 騷操作之 merge() 的使用方法
本文簡單介紹了一下Map.merge()的方法,除此之外,Java 8 中的HashMap實(shí)現(xiàn)方法使用了TreeNode和 紅黑樹,原理很相似,今天通過本文給大家介紹Java 8 中 Map 騷操作之 merge() 的用法 ,需要的朋友參考下吧2021-07-07

