一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java金額大小寫的轉(zhuǎn)換方法

Java金額大小寫的轉(zhuǎn)換方法

2020-09-06 15:14歐陽鵬 Java教程

這篇文章主要為大家詳細(xì)介紹了Java金額大小寫的轉(zhuǎn)換方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java金額大小寫轉(zhuǎn)換的具體代碼,供大家參考,具體內(nèi)容如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/**
 * @ClassName: NumberConvert
 * @Description: TODO
 * @date 2013-3-07 下午16:08:10
 * @version V1.0
 */
public class MoneyUtil {
  /** 大寫數(shù)字 */
  private static final String[] NUMBERS = { "零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖" };
  /** 整數(shù)部分的單位 */
  private static final String[] IUNIT = { "元", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟", "萬", "拾", "佰",
      "仟" };
  /** 小數(shù)部分的單位 */
  private static final String[] DUNIT = { "角", "分", "厘" };
 
  /**
   * 得到大寫金額。
   */
  public static String toChinese(String str) {
    str = str.replaceAll(",", "");// 去掉","
    String integerStr;// 整數(shù)部分?jǐn)?shù)字
    String decimalStr;// 小數(shù)部分?jǐn)?shù)字
 
    // 初始化:分離整數(shù)部分和小數(shù)部分
    if (str.indexOf(".") > 0) {
      integerStr = str.substring(0, str.indexOf("."));
      decimalStr = str.substring(str.indexOf(".") + 1);
    } else if (str.indexOf(".") == 0) {
      integerStr = "";
      decimalStr = str.substring(1);
    } else {
      integerStr = str;
      decimalStr = "";
    }
    // integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
    if (!integerStr.equals("")) {
      integerStr = Long.toString(Long.parseLong(integerStr));
      if (integerStr.equals("0")) {
        integerStr = "";
      }
    }
    // overflow超出處理能力,直接返回
    if (integerStr.length() > IUNIT.length) {
      System.out.println(str + ":超出處理能力");
      return str;
    }
 
    int[] integers = toArray(integerStr);// 整數(shù)部分?jǐn)?shù)字
    boolean isMust5 = isMust5(integerStr);// 設(shè)置萬單位
    int[] decimals = toArray(decimalStr);// 小數(shù)部分?jǐn)?shù)字
    return getChineseInteger(integers, isMust5) + getChineseDecimal(decimals);
  }
 
  /**
   * 整數(shù)部分和小數(shù)部分轉(zhuǎn)換為數(shù)組,從高位至低位
   */
  private static int[] toArray(String number) {
    int[] array = new int[number.length()];
    for (int i = 0; i < number.length(); i++) {
      array[i] = Integer.parseInt(number.substring(i, i + 1));
    }
    return array;
  }
 
  /**
   * 得到中文金額的整數(shù)部分。
   */
  private static String getChineseInteger(int[] integers, boolean isMust5) {
    StringBuffer chineseInteger = new StringBuffer("");
    int length = integers.length;
    for (int i = 0; i < length; i++) {
      // 0出現(xiàn)在關(guān)鍵位置:1234(萬)5678(億)9012(萬)3456(元)
      // 特殊情況:10(拾元、壹拾元、壹拾萬元、拾萬元)
      String key = "";
      if (integers[i] == 0) {
        if ((length - i) == 13)// 萬(億)(必填)
          key = IUNIT[4];
        else if ((length - i) == 9)// 億(必填)
          key = IUNIT[8];
        else if ((length - i) == 5 && isMust5)// 萬(不必填)
          key = IUNIT[4];
        else if ((length - i) == 1)// 元(必填)
          key = IUNIT[0];
        // 0遇非0時補(bǔ)零,不包含最后一位
        if ((length - i) > 1 && integers[i + 1] != 0)
          key += NUMBERS[0];
      }
      chineseInteger.append(integers[i] == 0 ? key : (NUMBERS[integers[i]] + IUNIT[length - i - 1]));
    }
    return chineseInteger.toString();
  }
 
  /**
   * 得到中文金額的小數(shù)部分。
   */
  private static String getChineseDecimal(int[] decimals) {
    StringBuffer chineseDecimal = new StringBuffer("");
    for (int i = 0; i < decimals.length; i++) {
      // 舍去3位小數(shù)之后的
      if (i == 3)
        break;
      chineseDecimal.append(decimals[i] == 0 ? "" : (NUMBERS[decimals[i]] + DUNIT[i]));
    }
    return chineseDecimal.toString();
  }
 
  /**
   * 判斷第5位數(shù)字的單位"萬"是否應(yīng)加。
   */
  private static boolean isMust5(String integerStr) {
    int length = integerStr.length();
    if (length > 4) {
      String subInteger = "";
      if (length > 8) {
        // 取得從低位數(shù),第5到第8位的字串
        subInteger = integerStr.substring(length - 8, length - 4);
      } else {
        subInteger = integerStr.substring(0, length - 4);
      }
      return Integer.parseInt(subInteger) > 0;
    } else {
      return false;
    }
  }
 
  public static void main(String[] args) {
    String number = "1.23";
    System.out.println(number + " " + MoneyUtil.toChinese(number));
    number = "1234567890123456.123";
    System.out.println(number + " " + MoneyUtil.toChinese(number));
    number = "0.0798";
    System.out.println(number + " " + MoneyUtil.toChinese(number));
    number = "10,001,000.09";
    System.out.println(number + " " + MoneyUtil.toChinese(number));
    number = "01.107700";
    System.out.println(number + " " + MoneyUtil.toChinese(number));
  }
 
}

運(yùn)行結(jié)果為:

1.23 壹元貳角叁分 
1234567890123456.123 壹仟貳佰叁拾肆萬伍仟陸佰柒拾捌億玖仟零壹拾貳萬叁仟肆佰伍拾陸元壹角貳分叁厘 
0.0798 柒分玖厘 
10,001,000.09 壹仟萬零壹仟元玖分 
01.107700 壹元壹角柒厘 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/ouyang_peng/article/details/8647084

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产福利一区二区在线精品 | 久久无码人妻中文国产 | 大又大又黄又爽免费毛片 | 69短视频 | 女暴露狂校园裸露小说 | 亚洲系列国产系列 | 国产精品成人自拍 | 午夜精品国产自在现线拍 | 亚洲久草视频 | 奇米网狠狠网 | 国产精品久久久久久久久久久威 | 操女人bb| 日韩亚洲欧美综合一区二区三区 | 亚洲无线一二三区2021 | 午夜久久久久久网站 | 精品久久久久久亚洲精品 | 久久伊人精品青青草原2021 | 午夜性色一区二区三区不卡视频 | 高清一级做a爱免费视 | 175m美女被网友灌醉啪啪玩脚 | xx18-19xxxxhd| 亚洲精品tv久久久久久久久久 | 黄漫免费观看 | 99re在线视频观看 | 日韩欧美亚洲一区精选 | 亚洲情欲网| 99久久精品免费观看区一 | 欧美vpswindowssex 欧美va在线高清 | 久久久无码精品无码国产人妻丝瓜 | 欧美精品99久久久久久人 | 久久性生大片免费观看性 | 春宵福利网站在线观看 | 亚洲欧美天堂综合久久 | 荡女人人爱| 18hdxxxx中国 | 2018av在线 | 亚洲 欧美 国产 日韩 字幕 | 国产成人精品777 | 午夜亚洲福利 | 教室眠催白丝美女校花 | 亚洲AV无码A片在线观看蜜桃 |