紫竹大哥面试华为如何了,不该发这里,呵呵。

解决方案 »

  1.   

    呵呵....如果是繁体操作系统呢?
      

  2.   

    自己写的一个大写装换类,集思广益,共享一下:)/**
     * @author Jason
     * 
     */
    public class DaxieUtil {
    /**
     * 阿拉伯数字对应的汉字大写字符集合.
     */
    private static char[] N = new char[] { '零', '壹', '贰', '叁', '肆', '伍', '陆',
    '柒', '捌', '玖' }; /**
     * 基本单位字符集合.
     */
    private static char[] U = new char[] { '拾', '佰', '仟' }; /**
     * 特殊单位字符集合.
     */
    private static char[] X = new char[] { '万', '亿', '兆' }; /**
     * 
     * @param d
     * @return
     */
    public static String toDaxie(double d) {
    if (d <= 0)
    return "";
    if (d > Long.MAX_VALUE)
    throw new IllegalArgumentException("参数超出长整数的最大支持范围!");
    String str = rawProcess(d);
    StringBuffer result = postProcess(d, str);
    fractionProcess(d, result);
    return result.toString();
    } /**
     * 小数部分处理.
     * 
     * @param d
     * @param result
     */
    private static void fractionProcess(double d, StringBuffer result) {
    if (d % 1 > 0) {// 处理小数部分, 仅支持两位小数
    int fraction = ((int) (d * 100)) % 100;
    if (fraction / 10 != 0) {
    result.append(N[fraction / 10] + "角");
    }
    if (fraction % 10 != 0) {
    result.append(N[fraction % 10] + "分");
    }
    } else {// 如果沒有小数, 尾部为'整'
    result.append("整");
    }
    } /**
     * 后处理过程, 处理为惯用法.
     * 
     * @param d
     * @param str
     * @return
     */
    private static StringBuffer postProcess(double d, String str) {
    StringBuffer result = new StringBuffer();
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
    char c = chars[i];
    if (c == N[0]) {// 处理为惯用用法
    if (i < chars.length - 1) {
    int ignoreType = 0;
    for (int j = 0; j < U.length; j++) {// 处理诸如'零仟', '零佰',
    // '零拾'等情况
    if (chars[i + 1] == U[j]) {
    ignoreType = -1;
    break;
    }
    }
    for (int j = 0; j < X.length; j++) {// 处理诸如'零亿','零万'等情况
    if (chars[i + 1] == X[j]) {
    ignoreType = 1;
    break;
    }
    }
    final int length = result.length();
    switch (ignoreType) {
    case -1:
    // 保证不输出相邻重复的'零', 跳过'零'后的单位符号
    i++;
    if (length > 0 && result.charAt(length - 1) != N[0])
    result.append(N[0]);
    break;
    case 1:
    // 如果单位'万','亿','兆'前面出现'零',则删除'零'
    i++;
    if (length > 0 && result.charAt(length - 1) == N[0])
    result.deleteCharAt(length - 1);
    char v = result.charAt(result.length() - 1);
    boolean append = true;
    for (int j = 0; j < X.length; j++) {// 处理诸如'亿万'的情况
    if (v == X[j]) {
    append = false;
    break;
    }
    }
    if (append)
    result.append(chars[i]);
    break;
    }
    }
    } else {
    result.append(c);
    }
    }
    // 处理最后一个字符是'零'的情况
    int len = result.length();
    if (len > 0 && result.charAt(len - 1) == N[0]) {
    result.deleteCharAt(len - 1);
    }
    result.append('圆');
    return result;
    } /**
     * 
     * @param d
     * @return
     */
    private static String rawProcess(double d) {
    StringBuffer buf = new StringBuffer();
    long n = (long) d;
    int bit = 0;
    int x = 0;
    while (n > 0) {
    int m = (int) (n % 10);// 最低位数字
    buf.append(N[m]);
    n = n / 10;
    if (n > 0) {
    int index = bit % 4;
    if (index == 3)
    buf.append(X[x++]);
    else
    buf.append(U[index]);
    }
    bit++;
    }
    return buf.reverse().toString();
    }}
      

  3.   

    有人可以写个比较可靠的把中文数字转阿拉伯的么?
      

  4.   

    楼上的意思是把中文金额大写转换为阿拉伯数字吗?这个问题应该很简单的。字符“圆”把大写分为两个部分,即整数部分和小数部分(小数部分可能没有)。整数部分通过“兆”、“亿”、“万”等单位符号把中文金额分为若干个部分,每部分的数值范围是0-9999的中文大写。这部分的数字转换非常容易,然后把每部分的数值乘以相应的单位代表的数值(比如万代表10000),相加之后的结果即为整数部分的数据。小数部分一般只有两位,就不必说了吧。思路很简单,可能写程序的时候要注意一些细节问题。