RMB 转大写的一个小demo

来源:互联网 发布:网络测试与故障诊断 编辑:程序博客网 时间:2024/04/29 18:27

昨天做了一道 面试题     本来以为很简单的    结果出了点岔子   发现原因后简直无语     

原来浮点类型的数值  在数值达到1000W时   java中会用科学计数法表示    平常没有注意到   

float f =120_024_436f;double d=120_024_436d;int i= 120_024_436;结果依次为:1.20024432E81.20024436E8120024436
同样的实际值  不同类型的表示  其中f的精度还降低了   


如果不想用科学计数法  必须进行格式化操作 再进行处理


package com.test;


import java.text.DecimalFormat;
import java.util.Scanner;

public class RmbToChar {
public static void main(String[] args) {
//防止double类型的转字符串以科学计数法表示
Scanner scan = new Scanner(System.in);//
System.out.print("请输入金额:");
double rst = scan.nextDouble();
rmbToChar(rst);//接收金额数
}

//思路 先把数转化String类型的字符串
private static voidrmbToChar(doublev) {//形参为金额数

// String num=Double.toString(v);

DecimalFormat decimalFormat = new DecimalFormat(".0000");//数字格式化 避免科学计数法跟逗号
// String num = decimalFormat.format(v).replace(",",""); //去除
String num = decimalFormat.format(v);
/*大写码表*/
String[] numberMap = {"","","","","","","","","",""};
/*整数部分
* substring()分割整数部分小数部分
* */
String integerPart = num.substring(0,num.indexOf("."));
/*小数部分*/
String decimalsPart = num.substring(num.indexOf(".") +1,num.length());
/*测试是否分离成功*/
System.out.println(integerPart + decimalsPart);
//将整数部分字符串分割成字符装入一个字符类型的数组容器
char[] integerParts = integerPart.toCharArray();
//将小数部分字符串分割成字符装入一个字符类型的数组容器
char[] decimalsParts = decimalsPart.toCharArray();
// //打印整数部分
//
for (int i = 0;i < integerParts.length;i++) {
System.out.print(numberMap[Integer.parseInt(String.valueOf(integerParts[i]))]);
switch (integerParts.length- i) {
case 10:
System.out.print("");
break;
case 9:
System.out.print("亿");
break;
case 8:
System.out.print("");
break;
case 7:
System.out.print("");
break;
case 6:
System.out.print("");
break;
case 5:
System.out.print("");
break;
case 4:
System.out.print("");
break;
case 3:
System.out.print("");
break;
case 2:
System.out.print("");
break;
default:
System.out.print("");
}
}

//打印小数部分
if(Integer.parseInt(decimalsPart) !=0) { //如果小数为是 非零
for(inti = 0;i < decimalsParts.length;i++) {
System.out.print(numberMap[Integer.parseInt(String.valueOf(decimalsParts[i]))]);
switch (i) {
case 0:
System.out.print("");
break;
case 1:
System.out.print("");
break;
case 2:
System.out.print("");
break;
default:
System.out.print("");
}
}

} else { //小数位 全为零
System.out.print("");
}
}
}
1 0
原创粉丝点击