|  |      1Light3      2017-09-06 11:45:08 +08:00  3 | 
|      2xfspace      2017-09-06 11:46:02 +08:00 via Android 数字前加个“大写” 大写 0 大写 1 没毛病 | 
|  |      3Famio      2017-09-06 11:50:30 +08:00 上古:<big>1234567890</big> | 
|  |      4Sanko      2017-09-06 11:55:11 +08:00 via Android 记得给二楼转一下电费 顺带给我发一下流量费 | 
|  |      5zonyitoo      2017-09-06 11:59:22 +08:00 自己写一个到底有多难? | 
|  |      6misaka19000      2017-09-06 12:01:33 +08:00 via Android 赔我点进来的流量费 | 
|  |      7asj      2017-09-06 12:14:12 +08:00 这个自己写写也就一两个小时吧 | 
|  |      8maplerecall      2017-09-06 12:24:14 +08:00 via Android @asj 这个很简单吧,十分钟就够了… | 
|  |      9yuanfnadi      2017-09-06 12:35:08 +08:00 这种普遍的需求,git 上任何语言肯定有轮子。 | 
|  |      10debuggerx      2017-09-06 12:57:50 +08:00  1   当年自学 java 的笔记…… 虽然早就不写 java 了,这个小本子却总是习惯性地装在包里。。。 | 
|      110ZXYDDu796nVCFxq      2017-09-06 13:00:30 +08:00 via iPhone 提这需求不是很正常吗? 再说调个轮子也就两行代码 | 
|  |      12jianleer      2017-09-06 13:09:38 +08:00 | 
|  |      13jianleer      2017-09-06 13:11:58 +08:00 看错了,以为是日常使用,请忽略楼上截图 | 
|  |      14ipconfiger      2017-09-06 13:13:55 +08:00 大写应该是 拾玖 才对吧 | 
|      15kslr      2017-09-06 13:24:00 +08:00 arr [ 0 = 零 1 = 壹 2 = 贰 3 = 叁 ] 第 1 天 第 arr[1]天 | 
|  |      178Cangtou      2017-09-06 13:41:04 +08:00 reduce~~~~map~~~~ | 
|      18silymore      2017-09-06 13:44:46 +08:00 via iPhone 可以来个 web api | 
|  |      19ipconfiger      2017-09-06 14:00:47 +08:00 这个单行搞不出来, 就算你憋着搞出来了, 一是无法容错, 二是无法调试, 三是没有可读性 所以一点实用价值也没有 | 
|  |      20AlisterTT      2017-09-06 14:04:52 +08:00 alfred 有个 workflow 有这功能的,你可以参考一下 https://github.com/yourtion/Alfred_NumToCny | 
|  |      21ShiHou      2017-09-06 14:06:13 +08:00 <script src="https://gist.github.com/Lyken17/d6c3acd8f6a13a3ef97dc7f820300904.js"></script> | 
|  |      22debuggerx      2017-09-06 14:13:52 +08:00 @debuggerx 只记了记不住的正则替换部分,完整方法和测试如下: public class Int2Big { static String int2big(int src) { final String num[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; final String unit[] = {"圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"}; String dst = ""; int count = 0; while (src > 0) { dst = (num[src % 10] + unit[count]) + dst; src = src / 10; count++; } return dst.replaceAll("零[仟佰拾]", "零").replaceAll("零+万", "万") .replaceAll("零+亿", "亿").replaceAll("亿万", "亿零") .replaceAll("零+", "零").replaceAll("零圆", "圆"); } public static void main(String[] args) { System.out.println(int2big(123004506)); //-->壹亿贰仟叁佰万肆仟伍佰零陆圆 System.out.println(int2big(6523464)); //-->陆佰伍拾贰万叁仟肆佰陆拾肆圆 System.out.println(int2big(1001000100));//-->壹拾亿零壹佰万零壹佰圆 System.out.println(int2big(808)); //-->捌佰零捌圆 } } | 
|  |      23haohaozaici      2017-09-06 14:22:40 +08:00 | 
|  |      24haohaozaici      2017-09-06 14:23:21 +08:00 | 
|  |      25BlackBerry      2017-09-06 14:24:55 +08:00 0 零 〇 | 
|  |      26ipconfiger      2017-09-06 14:29:08 +08:00 Python 一行的实现方式 之一: "".join(list(reversed(["%s%s" % (["", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"][int(list(reversed(seq))[idx])], unit) for idx, unit in enumerate(reversed(reduce(list.__add__, [ ["仟", "佰", "拾", big_unit] for big_unit in ["兆", "亿", "万", ""]]))) if idx<len(seq)]))) 能实现千兆以下数字的大写转换 But 并没有什么卵用, 为了实现一行写下, 牺牲了效率, 这是其一, 可读性差, 这是其二, 且, 对于 19 => 拾玖 这种省略转换, 并不支持, 会转换成 壹拾玖 所以, 不要这么干 | 
|  |      27mengyaoss77      2017-09-06 14:32:08 +08:00 @ipconfiger #26 对于发票上面写大写的话  好像 19 就需要写成 一十九吧 | 
|      28wenzhoou      2017-09-06 14:33:13 +08:00 via Android 19 转成 十九 优雅还是 一十九 优雅。119 呢? | 
|  |      29ipconfiger      2017-09-06 14:37:26 +08:00 @mengyaoss77 还有别的问题, 比如中间全是 0 的时候省略的问题 | 
|  |      30ipconfiger      2017-09-06 14:55:09 +08:00 再改一版: lambda seq:"".join(list(reversed([("%s%s" % (["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"][int(list(reversed(seq))[idx])], unit)) if idx>0 or int(list(reversed(seq))[1]) else ("零%s" % ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"][int(list(reversed(seq))[idx])]) for idx, unit in enumerate(reversed(reduce(list.__add__, [ ["仟", "佰", "拾", big_unit] for big_unit in ["兆", "亿", "万", ""]]))) if idx<len(seq) and int(list(reversed(seq))[idx])>0]))) 支持了中间一堆 0 的情况, but, 代码完全没有可读性了, Orz | 
|  |      31a87150      2017-09-06 14:59:20 +08:00 @ipconfiger from functools import reduce 我信了你的邪 | 
|  |      32Kisesy      2017-09-06 15:04:45 +08:00 | 
|  |      33ipconfiger      2017-09-06 15:06:11 +08:00 @a87150 并没有啊, 不信你试试, 2.7 哈 | 
|  |      35lixiangzaizheli      2017-09-06 15:34:24 +08:00 百度不会吗 | 
|  |      36sirm2z      2017-09-06 15:37:23 +08:00 js 自带: ``` var number = 1000 number.toLocaleString('zh-Hans-CN-u-nu-hanidec') ``` | 
|  |      37LancerEvo      2017-09-06 15:46:26 +08:00 | 
|  |      40ipconfiger      2017-09-06 16:04:06 +08:00 第二种方法: lambda seq: "".join(reversed(["".join([prefix, ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"][int(num)], unit]) for prefix, num, unit in [["零", tp[0], tp[1]] if idx<(len(seq)-1) and int(seq[len(seq)-idx-2])<1 else ["", tp[0], tp[1]] for idx, tp in enumerate(zip(list(reversed(seq)) , list(reversed(reduce(list.__add__, [ ["仟", "佰", "拾", big_unit] for big_unit in ["兆", "亿", "万", ""]]))))) if int(tp[0])]])) | 
|  |      41szopen      2017-09-06 16:35:01 +08:00 | 
|  |      42ipconfiger      2017-09-06 21:38:21 +08:00  1 终极一行写法, 解决了大部分已知问题, 并且支持输入数字 lambda number_string: (lambda seq: "".join(reversed(["".join(["".join([p, ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"][int(n)], u]) for p, n, u in reversed(s[0])]) + s[1] for s in [(lambda sub_seq: [[["零", tp[0], tp[1]] if i<(len(sub_seq)-1) and int(sub_seq[i+1])< 1 else ["", tp[0], tp[1]] for i, tp in enumerate(zip(sub_seq, ["", "拾", "佰", "仟"])) if int(tp[0])], unit])(seq[idx*4:(idx+1)*4] or []) for idx, unit in enumerate(["", "万", "亿", "兆", "京"])] if s[0]])))("".join(reversed(str(number_string)))) | 
|      44zhx1991      2017-09-06 23:35:31 +08:00 一百二 120 两百零二 202 两百二 220 | 
|  |      45asj      2017-09-07 08:21:38 +08:00 | 
|  |      46calebx      2017-09-07 11:25:19 +08:00 |