將一個浮點(diǎn)數(shù)轉(zhuǎn)換為中文人民幣讀法

package Chapter_04;

import java.util.Scanner;

public class Example_Num2Rmb {

private String[] hanArr={"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"};

private String[] unitArrZheng={"仟","佰","拾"};

private String[] unitArrXiao={"角","分"};

private String[] BigUnitArr={"億 ","萬 ","元 "};

/**

* 將一個double類型的數(shù)劃分為整數(shù)部分和小數(shù)部分

* @param num 初始double類型數(shù)據(jù)

* @return 返回一個數(shù)組,存放劃分出來的整數(shù)和小數(shù)

*/

public String[] divide(double num){

String[] number=new String[2];

long zheng=(long)num;

int xiao=(int)Math.round( (num-zheng)*100 );//round(double x):返回最接近的long型數(shù);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//round(float):返回最接近的int型數(shù)

number[0]=zheng+"";//存放整數(shù)部分

number[1]=xiao+"";//存放小數(shù)部分

if(number[1].length()==1){

number[1]="0"+number[1];

}

return number;

}

/**

* 對于整數(shù)部分的轉(zhuǎn)換

* @param zheng 整數(shù)部分字符串

* @return 返回對整數(shù)的中文讀法

*/

public String transZheng(String zheng){

int len=zheng.length();

int stage=len/4;

String aFour="";

String aTrans="";

if(len%4!=0){

stage++;//四位數(shù)一小節(jié),stage為總節(jié)數(shù)

}

if(stage>3){

System.out.println("整數(shù)部分超出讀取范圍,自動截取后12位!");

zheng=zheng.substring(len-12, len);

}

else if(len%4!=0){

zheng="0000".substring(0, 4-len%4 ) + zheng;//如果位數(shù)不是4的倍數(shù),就在前面補(bǔ)零變成4的倍數(shù)

}

stage=zheng.length()/4;

//一節(jié)一節(jié)的轉(zhuǎn)換數(shù)據(jù)

for(int i=0;i

aFour=zheng.substring(i*4, i*4+4);//截取一個四位數(shù)

//轉(zhuǎn)換截取的四位數(shù)

for(int j=0;j<4;j++){

int num=aFour.charAt(j)-48;//將字符數(shù)字轉(zhuǎn)換成數(shù)字,如'4'-- 4

//對于非零數(shù)的處理

if(num!=0){

if(j==3){

aTrans+=hanArr[num];//如果非零數(shù)是最后一位就不加單位

}

else{

aTrans+=hanArr[num]+unitArrZheng[j];//如果非零數(shù)不是最后一位就要帶上單位讀出

}

}

//這里是重點(diǎn)!?。?/p>

//對于零的處理,只有當(dāng)整個數(shù)中零的前面有非零數(shù)并且本小節(jié)內(nèi)零的后面也有非零數(shù)時才將它讀出來,零都沒有單位(有些繞口,還請細(xì)細(xì)體會~)

else if( !( zheng.substring(0, i*4+j).equals("000000000000".substring(0, i*4+j))

|| aFour.substring(j+1, 4).equals("0000".substring(j+1, 4)) ) ){

//對于連續(xù)多個零的處理,只需要讀出非零數(shù)前面的那個零即可

if(aFour.charAt(j+1)!='0'){

aTrans+=hanArr[num];

}

}

}

if(!aFour.equals("0000")){

aTrans+=BigUnitArr[3-stage+i];//如果這一小節(jié)不全為零就帶上一小節(jié)后的單位--億、萬、元

}

}

return aTrans;

}

/**

* 對于小數(shù)部分的轉(zhuǎn)換

* @param zheng 小數(shù)部分字符串

* @return 返回對小數(shù)的中文讀法

*/

public String transXiao(String xiao){

String aTrans="";

for(int i=0;i

int num=xiao.charAt(i)-48;

if(num!=0){

aTrans+=hanArr[num]+unitArrXiao[i];

}

}

return aTrans;

}

/**

* 將整數(shù)和小數(shù)的中文讀法合并,并且輸出最終的讀法

* @param num 初始數(shù)據(jù)

*/

public void trans(double num){

String aTrans="";

String[] divide=divide(num);

String aTransZheng=transZheng(divide[0]);

String aTransXiao=transXiao(divide[1]);

aTrans=aTransZheng+aTransXiao;

System.out.println("轉(zhuǎn)換的中文為:"+aTrans);

}

public static void main(String[] args){

Example_Num2Rmb nr=new Example_Num2Rmb();

Scanner input=new Scanner(System.in);

System.out.println("請輸入一個數(shù):");

double num=input.nextDouble();

nr.trans(num);

input.close();

}

} ?

測試:

圖片發(fā)自簡書App


圖片發(fā)自簡書App
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容