去相关银行业务的公司遇到的机试题常见的有两个,一个是写一个简单的存取款过程,另一个就是输入阿拉伯数字转大写了。
对于存取款过程需要明白其业务逻辑,大致是先登录,登录成功后可以存取款,取款的时候判断金额大小。顺带一提,这里应该还有一个转账的问题,需要先判定转账的账户是否存在,再判断自己的金额是否不足,这里就不写了。
对于第二个问题,那天同学也问了一句,闲暇时顺便也写了一下,代码如下:
package com.test;
/**
* @author sxycw
* <p>简单的数字转大写</p>
* <p>这样的逻辑也可以用枚举实现</p>
*/
public class NumberToCN {
//自定义字符
private static final String ling = "零";
private static final String[] zheng = {"圆","整"};
//定义大写中文数组
private static final String[] cnArr =
{ "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
//自定义单位数组
private static final String[] danwei =
{"", "拾", "佰", "仟" , "万" ,"拾" , "佰" ,"仟" , "亿" };
private static final String[] units = {"角","分"};
//自定义转换方法
public static String convert(String str){//168.789
String xiaoshu = null;//小数
String zhengshu = null;//整数
String result = null;//拼接结果
if(str!=null && str!=""){
//转换double
double d1 = Double.parseDouble(str);//168.789
if(d1 > 0){
//四舍五入保留两位小数
String s1 = String.format("%.2f", d1);//168.79
//整数小数分离
String[] arr = s1.split("[.]");//["168","79"]
for (int i = 0; i < arr.length; i++) {
if(i<1){
zhengshu = arr[i];
}else{
xiaoshu = arr[i];
}
}
//处理小数
String xiaoshu1 = null ;
if("00".equals(xiaoshu)){
//输入的为一个整数时
xiaoshu = zheng[1];//圆整
}else{
for (int i=0;i<xiaoshu.length();i++){
if(i<1){
xiaoshu1 = charToCn(xiaoshu.
charAt(i))+units[0];//柒角
}else{
xiaoshu1 += charToCn(xiaoshu.
charAt(i))+units[1];//玖分
}
}
xiaoshu = xiaoshu1;//柒角玖分
}
System.out.println(">>>小数部分---"+xiaoshu);
//处理整数
String zhengshu1 = "";
if(zhengshu.length()>13){
return "输入的数字过大!";
}else{
for (int i = 0; i < zhengshu.length(); i++) {
if("零".equals(charToCn(zhengshu.charAt(i)))){
//为0省略单位
zhengshu1+="零";
}else{
zhengshu1 += charToCn(zhengshu.charAt(i))+
danwei[zhengshu.length()-1-i];//壹佰陆拾捌
}
}
zhengshu = zhengshu1+zheng[0];//壹佰陆拾捌圆
}
System.out.println(">>>整数部分---"+zhengshu);
//拼接结果
result = zhengshu + xiaoshu;
System.out.println(">>>拼接结果---"+result);
}else{
return "输入的数字不合法!";
}
return result;
}else{
return "请输入一个数字";
}
}
//char转整int,再转String
public static String charToCn(char c){
String result = null;
int c1 = Integer.parseInt(String.valueOf(c));
for (int i = 0; i < cnArr.length; i++) {
if(i == c1){
result = cnArr[i];
}
}
return result;
}
public static void main(String[] args) {
//初始化输入值
String str = "168.789";
convert(str);
}
}
注意!这个代码还有一些问题,如100008的时候需要省根据0的个数省略相关的"零",还需要对单位万进行二次判断,这里先记下来,待完善。
-end-