Java浮点数转人民币读法
package theTest;
public class NumToRmb {
private String[] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[] unitArr={"仟","佰","拾"};
/**
* 把一个浮点数分解成整数部分和小数部分字符串
* @param num 需要被分解的浮点数
* @return 分解出来的整数部分和小数部分,第1个数组元素是整数部分,第2个数组元素是小数部分。
*/
private String[] divide(double num){
//将一个浮点数强制转换为long型,即得到它的整数部分
long zheng=(long)num;
//浮点数减去整数部分,得到小数部分,小数部分乘以100取整得到两位小数
long xiao=Math.round((num-zheng)*100);
//这里使用两种方法将整数转换为字符串
return new String[]{String.valueOf(zheng),xiao+""};
}
/**
* 将整数分成4个数字为一组的字符串处理,转化成大写数字再将它们连接起来,得到最终的人民币读法
* @param num 需要被转化为大写数字的浮点数
* @return 返回整个数字的人民币读法
*/
private String conHanStr(double num){
//存储整数结果、小数结果
String resZheng="";
String resXiao="";
//存储最终结果
String result="";
//分别存储整数部分和小数部分字符串
String zhengStr=divide(num)[0];
String xiaoStr=divide(num)[1];
/*小数部分的处理*/
if(xiaoStr.length()==1){
xiaoStr="0"+xiaoStr;
}
resXiao=xiao2Han(xiaoStr);
/*整数部分的处理*/
//记录字符串个数,是第几个数组
int countArr=0;
String tempStr="";
//记录位数
int countNum=0;
for(int i=zhengStr.length()-1;i>=0;i--){
countNum++;
tempStr=zhengStr.charAt(i)+tempStr;
if(i-1<0){
//i已经是最后一个数字,不够的位,补0
while(tempStr.length()<4){
tem