出题:如何优雅转换大写数字? 19 转成 十九

2017-09-06 11:43:32 +08:00
 jin5354
天杀的需求竟然要展示大写数字,我要和产品搏命

0 -> 零
5 -> 五
19 -> 十九
20 -> 二十
21 -> 二十一
100 -> 一百
5692 次点击
所在节点    程序员
46 条回复
szopen
2017-09-06 16:35:01 +08:00
ipconfiger
2017-09-06 21:38:21 +08:00
终极一行写法, 解决了大部分已知问题, 并且支持输入数字

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))))
natforum
2017-09-06 22:01:55 +08:00
@debuggerx 大佬,收徒吗
zhx1991
2017-09-06 23:35:31 +08:00
一百二 120
两百零二 202
两百二 220
asj
2017-09-07 08:21:38 +08:00
@maplerecall
我没做过,不过练习过几次数字转成英文的。反正我自己的水平是需要 1,2 个小时的。
转汉字可能细节上有不同,我应该还是达不到十分钟完全解决的。
calebx
2017-09-07 11:25:19 +08:00
https://github.com/calebx/number_to_cn
这是我多年前搞的。

可以看看,其实挺复杂的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX