❶ java編程 金額轉換
/**
金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如:
(¥1011)->(一千零一拾一元 整)輸出。
*/
import java.io.*;
import java.lang.String;
public class Money{
public static void main(String[] args)throws Exception{
String str=null;
System.out.println("請輸入您的金額¥:");
flag:
while(true){
try{BufferedReader in=
new BufferedReader(new InputStreamReader(System.in));
str=in.readLine();
}catch(IOException e){}
for(int i=0;i<str.length();i++){
if(str.charAt(i)>57||str.charAt(i)<48){
System.out.println("您輸入的金額有誤!請重新輸入");
continue flag;
}
}
break;
}
char[] ch=str.toCharArray();
for(int i=0;i<ch.length;i++){
switch(ch[i]){
case '0':{ ch[i]='零'; break;}
case '1':{ ch[i]='壹'; break;}
case '2':{ ch[i]='貳'; break;}
case '3':{ ch[i]='叄'; break;}
case '4':{ ch[i]='肆'; break;}
case '5':{ ch[i]='伍'; break;}
case '6':{ ch[i]='陸'; break;}
case '7':{ ch[i]='柒'; break;}
case '8':{ ch[i]='捌'; break;}
case '9':{ ch[i]='玖'; break;}
default: ch[i]='f';
}
}
int i=0;
switch(ch.length){
case 0:
case 1: {System.out.println(ch[i]+"元整");}
case 2: {System.out.println(ch[i]+"十"+ch[i+1]+"元整");}
case 3: {System.out.println(ch[i]+"百"+ch[i+1]+"十"+ch[i+2]+"元整");}
case 4: {System.out.println(ch[i]+"千"+ch[i+1]+"百"+ch[i+2]+"十"
+ch[i+3]+"元整"); break;}
case 5: {System.out.println(ch[i]+"萬"+ch[i+1]+"千"+ch[i+2]+"百"
+ch[i+3]+"十"+ch[i+4]+"元整"); break;}
case 6: {System.out.println(ch[i]+"十"+ch[i+1]+"萬"+ch[i+2]+"千"
+ch[i+3]+"百"+ch[i+4]+"十"+ch[i+5]+"元整"); break;}
case 7: {System.out.println(ch[i]+"百"+ch[i+1]+"十"+ch[i+2]+"萬"
+ch[i+3]+"千"+ch[i+4]+"百"+ch[i+5]+"十"+ch[i+6]+"元整"); break;}
case 8: {System.out.println(ch[i]+"千"+ch[i+1]+"百"+ch[i+2]+"十"
+ch[i+3]+"萬"+ch[i+4]+"千"+ch[i+5]+"百"+ch[i+6]+"十"+ch[i+7]+"元整"); break;}
case 9: {System.out.println(ch[i]+"億"+ch[i+1]+"千"+ch[i+2]+"百"
+ch[i+3]+"十"+ch[i+4]+"萬"+ch[i+5]+"千"+ch[i+6]+"百"+ch[i+7]+"十"
+ch[i+8]+"元整"); break;}
case 10: {System.out.println(ch[i]+"十"+ch[i+1]+"億"+ch[i+2]+"千"
+ch[i+3]+"百"+ch[i+4]+"十"+ch[i+5]+"萬"+ch[i+6]+"千"+ch[i+7]+"百"+ch[i+8]+"十"
+ch[i+9]+"元整"); break;}
default: System.out.println("錯誤");
}
}
}
❷ java轉換數字以萬為單位
import java.util.Scanner;
/**
* 小於100000的不轉換,大於或等於100000的轉換為10萬,以此類推,110000轉為11萬,112000為11.2萬
* @author inferno
*
*/
public class Wan {
public static void main(String[] args) {
System.out.print("輸入一個專整數:");
Scanner scan = new Scanner(System.in);
long num = scan.nextLong();
if(num<100000){
System.out.println("您輸屬入的數字為:"+num);
}else{
double n = (double)num/10000;
System.out.println("您輸入的數字為:"+n+"萬");
}
}
}
❸ JAVA程序 輸入一串數字如12341289.23,輸出萬千百十元角分。高手幫忙!謝謝
//將人民幣金額轉換為大寫
function upDigit(n){
var fraction = ["角","分"];
var digit = ["零","壹","貳","叄","肆","伍","陸","柒","捌","玖"];
var unit = [["元","萬","億"],["","拾","佰","仟"]];
var head = n<0?"負":"";
n = Math.abs(n);
var s = "";
for(var i=0; i<fraction.length; i++){
s += (digit[Math.floor(n*10*Math.pow(10,i))%10]+fraction[i]).replace(/零./,"");
}
s = s||"整";
n = Math.floor(n);
for(var i=0; i<unit[0].length && n>0; i++){
var p = "";
for(var j=0; j<unit[1].length && n>0; j++){
p = digit[n%10] + unit[1][j]+p;
n = Math.floor(n/10);
}
s = p.replace(/(零.)*零$/,"").replace(/^$/,"零") + unit[0][i] + s;
}
return head + s.replace(/(零.)*零元/,"元").replace(/(零.)+/g,"零").replace(/(^整$)/,"零元整");
}
❹ Java將控制台輸入的人民幣數字金額轉化為大寫
import java.text.*;
import java.util.Scanner;
/**
* @作者:智鴟兒-chier
* @version 1.0 己丑年八月初三-2009/09/21
*/
public class RenminbiZhuanhuan {
/**
*
*/
public RenminbiZhuanhuan() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("請輸入你要轉換的金額:");
double number=s.nextDouble();
String s1=zhuanhuan(new Double(number));
System.out.println("轉換成大寫後的金額是:"+s1);
// TODO Auto-generated method stub
}
public static String zhuanhuan(Object ob){
String s=new DecimalFormat("#.00").format(ob);
s=s.replaceAll("\\.", "");//將字元串中的"."去掉
char d[]={ '零', '一', '兩', '三', '四',
'五', '六', '七', '八', '九'};
String unit="仟佰拾兆仟佰拾億仟佰拾萬仟佰拾元角分";
int c=unit.length();
StringBuffer sb=new StringBuffer(unit);
for(int i=s.length()-1;i>=0;i--){
sb.insert(c-s.length()+i,d[s.charAt(i)-0x30]);
}
s=sb.substring(c-s.length(),c+s.length());
s=s.replaceAll("零[仟佰拾]", "零").
replaceAll("零{2,}", "零").
replaceAll("零([兆萬元Ԫ])", "$1").
replaceAll("零[角分]", "");
return s;
}
}
希望對你有幫助!
❺ JAVA 編程 輸出金額的中文大寫形式
public class Text {
/**
* 測試程序的可行性
* @param args
*/
public static void main(String[] args) {
System.out.println("--------將數字轉換成中文金額的大寫形式------------\n");
Trans2RMB t2r = new Trans2RMB();
String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));
// 如果轉換過後是一個空串,則不輸出屏幕
if(!"".equals(s)) {
System.out.println("轉換成中文後為:" + s);;
}
System.out.println("\n---------------------------------------------");
}
/**
* 從命令行接收一個數,在其中調用 checkNum() 方法對其進行
* 驗證,並返回相應的值
* @return 如果輸入合法,返回輸入的這個數
*/
private String getNum() {
String s = null;
System.out.println("請輸入一個數字(精確到小數點後兩位):");
// 從命令行輸入這個浮點數
java.util.Scanner scanner = new java.util.Scanner(System.in);
s = scanner.next();
// 判斷用戶輸入是否合法
// 若合法,返回這個值;若非法返回 "0"
if(this.checkNum(s)) {
return s;
} else {
return "";
}
}
/**
* 判斷用戶輸入的數據是否合法,用戶只能輸入大於零的數字,不能輸入其它字元
* @param s String
* @return 如果用戶輸入數據合法,返回 true,否則返回 false
*/
private boolean checkNum(String s) {
// 如果用戶輸入的數里有非數字字元,則視為非法數據,返回 false
try {
float f = Float.valueOf(s);
// 如果這個數小於零則視為非法數據,返回 false
if(f < 0) {
System.out.println("非法數據,請檢查!");
return false;
}else {
return true;
}
} catch (NumberFormatException e) {
System.out.println("非法數據,請檢查!");
return false;
}
}
/**
* 把用戶輸入的數以小數點為界分割開來,並調用 numFormat() 方法
* 進行相應的中文金額大寫形式的轉換
* 註:傳入的這個數應該是經過 roundString() 方法進行了四捨五入操作的
* @param s String
* @return 轉換好的中文金額大寫形式的字元串
*/
private String splitNum(String s) {
// 如果傳入的是空串則繼續返回空串
if("".equals(s)) {
return "";
}
// 以小數點為界分割這個字元串
int index = s.indexOf(".");
// 截取並轉換這個數的整數部分
String intOnly = s.substring(0, index);
String part1 = this.numFormat(1, intOnly);
// 截取並轉換這個數的小數部分
String smallOnly = s.substring(index + 1);
String part2 = this.numFormat(2, smallOnly);
// 把轉換好了的整數部分和小數部分重新拼湊一個新的字元串
String newS = part1 + part2;
return newS;
}
/**
* 對傳入的數進行四捨五入操作
* @param s String 從命令行輸入的那個數
* @return 四捨五入後的新值
*/
private String roundString(String s) {
// 如果傳入的是空串則繼續返回空串
if("".equals(s)) {
return "";
}
// 將這個數轉換成 double 類型,並對其進行四捨五入操作
double d = Double.parseDouble(s);
// 此操作作用在小數點後兩位上
d = (d * 100 + 0.5) / 100;
// 將 d 進行格式化
s = new java.text.DecimalFormat("##0.000").format(d);
// 以小數點為界分割這個字元串
int index = s.indexOf(".");
// 這個數的整數部分
String intOnly = s.substring(0, index);
// 規定數值的最大長度只能到萬億單位,否則返回 "0"
if(intOnly.length()13) {
System.out.println("輸入數據過大!(整數部分最多13位!)");
return "";
}
// 這個數的小數部分
String smallOnly = s.substring(index + 1);
// 如果小數部分大於兩位,只截取小數點後兩位
if(smallOnly.length()2) {
String roundSmall = smallOnly.substring(0, 2);
// 把整數部分和新截取的小數部分重新拼湊這個字元串
s = intOnly + "." + roundSmall;
}
return s;
}
/**
* 把傳入的數轉換為中文金額大寫形式
* @param flag int 標志位,1 表示轉換整數部分,0 表示轉換小數部分
* @param s String 要轉換的字元串
* @return 轉換好的帶單位的中文金額大寫形式
*/
private String numFormat(int flag, String s) {
int sLength = s.length();
// 貨幣大寫形式
String bigLetter args) {
System.out.println("--------將數字轉換成中文金額的大寫形式------------\n");
Trans2RMB t2r = new Trans2RMB();
String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));
// 如果轉換過後是一個空串,則不輸出屏幕
if(!"".equals(s)) {
System.out.println("轉換成中文後為:" + s);;
}
System.out.println("\n---------------------------------------------");
}
/**
* 從命令行接收一個數,在其中調用 checkNum() 方法對其進行
* 驗證,並返回相應的值
* @return 如果輸入合法,返回輸入的這個數
*/
private String getNum() {
String s = null;
System.out.println("請輸入一個數字(精確到小數點後兩位):");
// 從命令行輸入這個浮點數
java.util.Scanner scanner = new java.util.Scanner(System.in);
s = scanner.next();
// 判斷用戶輸入是否合法
// 若合法,返回這個值;若非法返回 "0"
if(this.checkNum(s)) {
return s;
} else {
return "";
}
}
/**
* 判斷用戶輸入的數據是否合法,用戶只能輸入大於零的數字,不能輸入其它字元
* @param s String
* @return 如果用戶輸入數據合法,返回 true,否則返回 false
*/
private boolean checkNum(String s) {
// 如果用戶輸入的數里有非數字字元,則視為非法數據,返回 false
try {
float f = Float.valueOf(s);
// 如果這個數小於零則視為非法數據,返回 false
if(f < 0) {
System.out.println("非法數據,請檢查!");
return false;
}else {
return true;
}
} catch (NumberFormatException e) {
System.out.println("非法數據,請檢查!");
return false;
}
}
/**
* 把用戶輸入的數以小數點為界分割開來,並調用 numFormat() 方法
* 進行相應的中文金額大寫形式的轉換
* 註:傳入的這個數應該是經過 roundString() 方法進行了四捨五入操作的
* @param s String
* @return 轉換好的中文金額大寫形式的字元串
*/
private String splitNum(String s) {
// 如果傳入的是空串則繼續返回空串
if("".equals(s)) {
return "";
}
// 以小數點為界分割這個字元串
int index = s.indexOf(".");
// 截取並轉換這個數的整數部分
String intOnly = s.substring(0, index);
String part1 = this.numFormat(1, intOnly);
// 截取並轉換這個數的小數部分
String smallOnly = s.substring(index + 1);
String part2 = this.numFormat(2, smallOnly);
// 把轉換好了的整數部分和小數部分重新拼湊一個新的字元串
String newS = part1 + part2;
return newS;
}
/**
* 對傳入的數進行四捨五入操作
* @param s String 從命令行輸入的那個數
* @return 四捨五入後的新值
*/
private String roundString(String s) {
// 如果傳入的是空串則繼續返回空串
if("".equals(s)) {
return "";
}
// 將這個數轉換成 double 類型,並對其進行四捨五入操作
double d = Double.parseDouble(s);
// 此操作作用在小數點後兩位上
d = (d * 100 + 0.5) / 100;
// 將 d 進行格式化
s = new java.text.DecimalFormat("##0.000").format(d);
// 以小數點為界分割這個字元串
int index = s.indexOf(".");
// 這個數的整數部分
String intOnly = s.substring(0, index);
// 規定數值的最大長度只能到萬億單位,否則返回 "0"
if(intOnly.length()13) {
System.out.println("輸入數據過大!(整數部分最多13位!)");
return "";
}
// 這個數的小數部分
String smallOnly = s.substring(index + 1);
// 如果小數部分大於兩位,只截取小數點後兩位
if(smallOnly.length()2) {
String roundSmall = smallOnly.substring(0, 2);
// 把整數部分和新截取的小數部分重新拼湊這個字元串
s = intOnly + "." + roundSmall;
}
return s;
}
/**
* 把傳入的數轉換為中文金額大寫形式
* @param flag int 標志位,1 表示轉換整數部分,0 表示轉換小數部分
* @param s String 要轉換的字元串
* @return 轉換好的帶單位的中文金額大寫形式
*/
private String numFormat(int flag, String s) {
int sLength = s.length();
// 貨幣大寫形式
String bigLetter[] = {"零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖"};
// 貨幣單位
String unit[] = {"元", "拾", "佰", "仟", "萬",
// 拾萬位到仟萬位
"拾", "佰", "仟",
// 億位到萬億位
"億", "拾", "佰", "仟", "萬"};
String small[] = {"分", "角"};
// 用來存放轉換後的新字元串
String newS = "";
// 逐位替換為中文大寫形式
for(int i = 0; i < sLength; i ++) {
if(flag == 1) {
// 轉換整數部分為中文大寫形式(帶單位)
newS = newS + bigLetter[s.charAt(i) - 48] + unit[sLength - i - 1];
} else if(flag == 2) {
// 轉換小數部分(帶單位)
newS = newS + bigLetter[s.charAt(i) - 48] + small[sLength - i - 1];
}
}
return newS;
}
/**
* 把已經轉換好的中文金額大寫形式加以改進,清理這個字
* 符串裡面多餘的零,讓這個字元串變得更加可觀
* 註:傳入的這個數應該是經過 splitNum() 方法進行處理,這個字
* 符串應該已經是用中文金額大寫形式表示的
* @param s String 已經轉換好的字元串
* @return 改進後的字元串
*/
private String cleanZero(String s) {
// 如果傳入的是空串則繼續返回空串
if("".equals(s)) {
return "";
}
// 如果用戶開始輸入了很多 0 去掉字元串前面多餘的『零『,使其看上去更符合習慣
while(s.charAt(0) == 『零『) {
// 將字元串中的 "零" 和它對應的單位去掉
s = s.substring(2);
// 如果用戶當初輸入的時候只輸入了 0,則只返回一個 "零"
if(s.length() == 0) {
return "零";
}
}
// 字元串中存在多個『零『在一起的時候只讀出一個『零『,並省略多餘的單位
/* 由於本人對演算法的研究太菜了,只能用4個正則表達式去轉換了,各位大蝦別介意哈... */
String regex1[] = {"零仟", "零佰", "零拾"};
String regex2[] = {"零億", "零萬", "零元"};
String regex3[] = {"億", "萬", "元"};
String regex4[] = {"零角", "零分"};
// 第一輪轉換把 "零仟", 零佰","零拾"等字元串替換成一個"零"
for(int i = 0; i < 3; i ++) {
s = s.replaceAll(regex1[i], "零");
}
// 第二輪轉換考慮 "零億","零萬","零元"等情況
// "億","萬","元"這些單位有些情況是不能省的,需要保留下來
for(int i = 0; i < 3; i ++) {
// 當第一輪轉換過後有可能有很多個零疊在一起
// 要把很多個重復的零變成一個零
s = s.replaceAll("零零零", "零");
s = s.replaceAll("零零", "零");
s = s.replaceAll(regex2[i], regex3[i]);
}
// 第三輪轉換把"零角","零分"字元串省略
for(int i = 0; i < 2; i ++) {
s = s.replaceAll(regex4[i], "");
}
// 當"萬"到"億"之間全部是"零"的時候,忽略"億萬"單位,只保留一個"億"
s = s.replaceAll("億萬", "億");
return s;
}
}
❻ java實現金額轉換,阿拉伯數字的金額轉換成中國傳統的形式
直接通過以下介面類方法實現即可:
import java.math.BigDecimal;
/**
* 金額工具類
*
* @author zn
*
* @Date 2013-2-1
* @Email [email protected]
*/
public class MoneyUtil {
private static final int DFT_SCALE = 2;
/** 大寫數字 */
private static final String[] NUMBERS = { "零", "壹", "貳", "叄", "肆", "伍",
"陸", "柒", "捌", "玖" };
/** 整數部分的單位 */
private static final String[] IUNIT = { "元", "拾", "佰", "仟", "萬", "拾", "佰",
"仟", "億", "拾", "佰", "仟", "萬", "拾", "佰", "仟" };
/** 小數部分的單位 */
private static final String[] DUNIT = { "角", "分", "厘" };
/**
* 得到大寫金額。
*/
public static String toChinese(String str) {
str = str.replaceAll(",", "");// 去掉","
String integerStr;// 整數部分數字
String decimalStr;// 小數部分數字
// 初始化:分離整數部分和小數部分
if (str.indexOf(".") > 0) {
integerStr = str.substring(0, str.indexOf("."));
decimalStr = str.substring(str.indexOf(".") + 1);
} else if (str.indexOf(".") == 0) {
integerStr = "";
decimalStr = str.substring(1);
} else {
integerStr = str;
decimalStr = "";
}
// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分捨去)
if (!integerStr.equals("")) {
integerStr = Long.toString(Long.parseLong(integerStr));
if (integerStr.equals("0")) {
integerStr = "";
}
}
// overflow超出處理能力,直接返回
if (integerStr.length() > IUNIT.length) {
System.out.println(str + ":超出處理能力");
return str;
}
int[] integers = toArray(integerStr);// 整數部分數字
boolean isMust5 = isMust5(integerStr);// 設置萬單位
int[] decimals = toArray(decimalStr);// 小數部分數字
return getChineseInteger(integers, isMust5)
+ getChineseDecimal(decimals);
}
/**
* 整數部分和小數部分轉換為數組,從高位至低位
*/
private static int[] toArray(String number) {
int[] array = new int[number.length()];
for (int i = 0; i < number.length(); i++) {
array[i] = Integer.parseInt(number.substring(i, i + 1));
}
return array;
}
/**
* 得到中文金額的整數部分。
*/
private static String getChineseInteger(int[] integers, boolean isMust5) {
StringBuffer chineseInteger = new StringBuffer("");
int length = integers.length;
for (int i = 0; i < length; i++) {
// 0出現在關鍵位置:1234(萬)5678(億)9012(萬)3456(元)
// 特殊情況:10(拾元、壹拾元、壹拾萬元、拾萬元)
String key = "";
if (integers[i] == 0) {
if ((length - i) == 13)// 萬(億)(必填)
key = IUNIT[4];
else if ((length - i) == 9)// 億(必填)
key = IUNIT[8];
else if ((length - i) == 5 && isMust5)// 萬(不必填)
key = IUNIT[4];
else if ((length - i) == 1)// 元(必填)
key = IUNIT[0];
// 0遇非0時補零,不包含最後一位
if ((length - i) > 1 && integers[i + 1] != 0)
key += NUMBERS[0];
}
chineseInteger.append(integers[i] == 0 ? key
: (NUMBERS[integers[i]] + IUNIT[length - i - 1]));
}
return chineseInteger.toString();
}
/**
* 得到中文金額的小數部分。
*/
private static String getChineseDecimal(int[] decimals) {
StringBuffer chineseDecimal = new StringBuffer("");
for (int i = 0; i < decimals.length; i++) {
// 捨去3位小數之後的
if (i == 3)
break;
chineseDecimal.append(decimals[i] == 0 ? ""
: (NUMBERS[decimals[i]] + DUNIT[i]));
}
return chineseDecimal.toString();
}
/**
* 判斷第5位數字的單位"萬"是否應加。
*/
private static boolean isMust5(String integerStr) {
int length = integerStr.length();
if (length > 4) {
String subInteger = "";
if (length > 8) { // TODO 12-9-17
// 取得從低位數,第5到第8位的字串
subInteger = integerStr.substring(length - 8, length - 4);
} else {
subInteger = integerStr.substring(0, length - 4);
}
return Integer.parseInt(subInteger) > 0;
} else {
return false;
}
}
/**
* BigDecimal 相乘,四捨五入保留0位
*
* @param a
* @param b
* @return a*b
*/
public static BigDecimal mutiply(String a, String b, int roundingMode) {
BigDecimal bd = new BigDecimal(a);
return bd.multiply(new BigDecimal(b)).setScale(DFT_SCALE, roundingMode);
}
/**
* BigDecimal 相除,四捨五入保留兩位
*
* @param a
* @param b
* @return a/b
*/
public static BigDecimal div(String a, String b, int roundingMode) {
BigDecimal decimal1 = new BigDecimal(a);
BigDecimal decimal2 = new BigDecimal(b);
return decimal1.divide(decimal2, DFT_SCALE, roundingMode);
}
/**
* BigDecimal 相加,四捨五入保留兩位
*
* @param a
* @param b
* @return a+b
*/
public static BigDecimal sum(String a, String b, int roundingMode) {
BigDecimal decimal1 = new BigDecimal(a);
BigDecimal decimal2 = new BigDecimal(b);
// DecimalFormat format = new DecimalFormat("#0.00");
return decimal1.add(decimal2).setScale(DFT_SCALE, roundingMode);
}
/**
* BigDecimal 相減,四捨五入保留兩位
*
* @param a
* @param b
* @return a+b
*/
public static BigDecimal sub(String a, String b, int roundingMode) {
BigDecimal decimal1 = new BigDecimal(a);
BigDecimal decimal2 = new BigDecimal(b);
// DecimalFormat format = new DecimalFormat("#0.00");
return decimal1.subtract(decimal2).setScale(DFT_SCALE, roundingMode);
}
/**
* 100.00 為10000
*
* @param a
* @return
*/
public static BigDecimal format(String a, int roundingMode) {
return new BigDecimal(a).multiply(new BigDecimal(100)).setScale(0,
roundingMode);
}
public static void main(String[] args) {
String number = "54452";
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = "30200";
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = "30000.05";
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = "30000.00";
System.out.println(number + " " + MoneyUtil.toChinese(number));
}
}
備註:最後面的main方法是具體的調用。