疯狂Java讲义Chapter4本章练习5:编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006.33转换成壹仟零陆元叁角叁分。
import java.util.*;
public class FloatToRmb {
private String[] hanArr = {"零", "壹", "贰", "叁","肆", "伍", "陆", "柒", "捌", "玖"};
private String[] unitArr = {"分","角","元","拾","佰","仟","萬","拾","佰","仟","亿","拾","佰","仟"};
/**
* 把一个浮点数转换成人民币读法字符串
* 本程序最大的读数为千亿
*/
private String toHanStr(double input){
String result = "";
long num = (long) (input * 100);
int b;
int count = -1;//用于记录当前位的上一位是否为0
int len = String.valueOf(num).length();
boolean isWanZero = false;//判断万位数是否为0
if (len > 10)
{
isWanZero = String.valueOf(num).substring(len - 10, len - 6).equals("0000");
}
for (int i = len - 1; i>= 0; i--)
{
b = (int)(num / Math.pow(10.0, i));
if (b != 0)
{
num = (long)(num - b * Math.pow(10.0, i));
if (count == 0)
{
//如果前一位为0,即count == 0,则加零
result += hanArr[0] + hanArr[b] + unitArr[i % len];
} else {
result += hanArr[b] + unitArr[i % len];
}
} else {
//加亿,萬,元
if (i % 4 == 2 && !(i == 6 && isWanZero))
{
result += unitArr[i % len];
}
}
count = b;
}
return result;
}
public static void main(String[] args) {
FloatToRmb fr = new FloatToRmb();
System.out.println("请输入要转化成人民币读法的浮点数:");
Scanner in = new Scanner(System.in);
double money = in.nextDouble();
System.out.println(fr.toHanStr(money));
}
}