将数字转为中文金额的大写方式Java版

  • 格式:docx
  • 大小:16.10 KB
  • 文档页数:6

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

将数字转为中文金额的大写方式(Java版)

将数字转为中文金额的大写方式(Java版)

/**

* 程序目的:

* 从命令行接收一个数,并将其转化为中文金额的大写方式

* 例如123.45 --> 壹佰贰拾叁元肆角伍分

* @author LovinChan

*

* 看到网上有很多这样的例子程序,不过觉得很不满意。有些程序我从命名上就觉得* 实在是不符合规范,程序里面的算法没有让人明白得很清楚的注释,读上去觉得有* 点难度,可读性不强。而且很多程序还存在不少bug,随便一测就测出来了。

* 所以本人还是决定重新写一下这个程序,并且尽量做到消除不必要的bug。这个程* 序我没有用什么很精妙的算法,不过用了一些Java类库中的类,像是正则表达式之类* 的东西。由于本人对算法不怎么在行,在做转换操作的时候用的是很笨的方法。望各位

* 大虾海涵,呵呵。

*

* 程序的注释我尽量写得详细一点,如果觉得这个程序哪里有问题或者是哪里有改进的

* 地方欢迎随时跟我交流。

* 我的msn:egg.chenlw@

* QQ:543669516(注上为什么加我就可以了)

* 我的blog:/egg_chen

* 欢迎交流

*/

public class Trans2RMB {

/**

* 测试程序的可行性

* @param args

*/

public static void main(String[] args) {

System.out.println("\n--------将数字转换成中文金额的大写形式------------\n"); Trans2RMB t2r = new Trans2RMB();

String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));

// 如果转换过后是一个空串,则不输出屏幕

if(!"".equals(s)) {

System.out.println("转换成中文后为:" + s);;

}

System.out.println("\n---------------------------------------------");

}

/**

* 从命令行接收一个数,在其中调用checkNum() 方法对其进行

* 验证,并返回相应的值

* @return 如果输入合法,返回输入的这个数

*/

private String getNum() {

String s = null;

System.out.println("请输入一个数字(精确到小数点后两位):");

// 从命令行输入这个浮点数

java.util.Scanner scanner = new java.util.Scanner(System.in);

s = scanner.next();

// 关闭这个Scanner

scanner.close();

// 判断用户输入是否合法

// 若合法,返回这个值;若非法返回"0"

if(this.checkNum(s)) {

return s;

} else {

return "";

}

}

/**

* 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符* @param s String

* @return 如果用户输入数据合法,返回true,否则返回false

*/

private boolean checkNum(String s) {

// 如果用户输入的数里有非数字字符,则视为非法数据,返回false

try {

float f = Float.valueOf(s);

// 如果这个数小于零则视为非法数据,返回false

if(f < 0) {

System.out.println("非

法数据,请检查!");

return false;

}else {

return true;

}

} catch (NumberFormatException e) {

System.out.println("非法数据,请检查!");

return false;

}

}

/**

* 把用户输入的数以小数点为界分割开来,并调用numFormat() 方法

* 进行相应的中文金额大写形式的转换

* 注:传入的这个数应该是经过roundString() 方法进行了四舍五入操作的* @param s String

* @return 转换好的中文金额大写形式的字符串

*/

private String splitNum(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 以小数点为界分割这个字符串

int index = s.indexOf(".");

// 截取并转换这个数的整数部分

String intOnly = s.substring(0, index);

String part1 = this.numFormat(1, intOnly);

// 截取并转换这个数的小数部分

String smallOnly = s.substring(index + 1);

String part2 = this.numFormat(2, smallOnly);

// 把转换好了的整数部分和小数部分重新拼凑一个新的字符串

String newS = part1 + part2;

return newS;

}

/**

* 对传入的数进行四舍五入操作

* @param s String 从命令行输入的那个数

* @return 四舍五入后的新值

*/

private String roundString(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 将这个数转换成double 类型,并对其进行四舍五入操作

double d = Double.parseDouble(s);

// 此操作作用在小数点后两位上