1
Light3 2017-09-06 11:45:08 +08:00 3
|
2
xfspace 2017-09-06 11:46:02 +08:00 via Android
数字前加个“大写”
大写 0 大写 1 没毛病 |
3
Famio 2017-09-06 11:50:30 +08:00
上古:<big>1234567890</big>
|
4
Sanko 2017-09-06 11:55:11 +08:00 via Android
记得给二楼转一下电费
顺带给我发一下流量费 |
5
zonyitoo 2017-09-06 11:59:22 +08:00
自己写一个到底有多难?
|
6
misaka19000 2017-09-06 12:01:33 +08:00 via Android
赔我点进来的流量费
|
7
asj 2017-09-06 12:14:12 +08:00
这个自己写写也就一两个小时吧
|
8
maplerecall 2017-09-06 12:24:14 +08:00 via Android
@asj 这个很简单吧,十分钟就够了…
|
9
yuanfnadi 2017-09-06 12:35:08 +08:00
这种普遍的需求,git 上任何语言肯定有轮子。
|
10
debuggerx 2017-09-06 12:57:50 +08:00 1
当年自学 java 的笔记…… 虽然早就不写 java 了,这个小本子却总是习惯性地装在包里。。。 |
11
0ZXYDDu796nVCFxq 2017-09-06 13:00:30 +08:00 via iPhone
提这需求不是很正常吗?
再说调个轮子也就两行代码 |
12
jianleer 2017-09-06 13:09:38 +08:00
|
13
jianleer 2017-09-06 13:11:58 +08:00
看错了,以为是日常使用,请忽略楼上截图
|
14
ipconfiger 2017-09-06 13:13:55 +08:00
大写应该是 拾玖 才对吧
|
15
kslr 2017-09-06 13:24:00 +08:00
arr [
0 = 零 1 = 壹 2 = 贰 3 = 叁 ] 第 1 天 第 arr[1]天 |
17
8Cangtou 2017-09-06 13:41:04 +08:00
reduce~~~~map~~~~
|
18
silymore 2017-09-06 13:44:46 +08:00 via iPhone
可以来个 web api
|
19
ipconfiger 2017-09-06 14:00:47 +08:00
这个单行搞不出来, 就算你憋着搞出来了, 一是无法容错, 二是无法调试, 三是没有可读性 所以一点实用价值也没有
|
20
AlisterTT 2017-09-06 14:04:52 +08:00
alfred 有个 workflow 有这功能的,你可以参考一下 https://github.com/yourtion/Alfred_NumToCny
|
21
ShiHou 2017-09-06 14:06:13 +08:00
<script src="https://gist.github.com/Lyken17/d6c3acd8f6a13a3ef97dc7f820300904.js"></script>
|
22
debuggerx 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)); //-->捌佰零捌圆 } } |
23
haohaozaici 2017-09-06 14:22:40 +08:00
|
24
haohaozaici 2017-09-06 14:23:21 +08:00
|
25
BlackBerry 2017-09-06 14:24:55 +08:00
0 零 〇
|
26
ipconfiger 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 => 拾玖 这种省略转换, 并不支持, 会转换成 壹拾玖 所以, 不要这么干 |
27
mengyaoss77 2017-09-06 14:32:08 +08:00
@ipconfiger #26 对于发票上面写大写的话 好像 19 就需要写成 一十九吧
|
28
wenzhoou 2017-09-06 14:33:13 +08:00 via Android
19 转成 十九 优雅还是 一十九 优雅。119 呢?
|
29
ipconfiger 2017-09-06 14:37:26 +08:00
@mengyaoss77 还有别的问题, 比如中间全是 0 的时候省略的问题
|
30
ipconfiger 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 |
31
a87150 2017-09-06 14:59:20 +08:00
@ipconfiger from functools import reduce 我信了你的邪
|
32
Kisesy 2017-09-06 15:04:45 +08:00
|
33
ipconfiger 2017-09-06 15:06:11 +08:00
@a87150 并没有啊, 不信你试试, 2.7 哈
|
35
lixiangzaizheli 2017-09-06 15:34:24 +08:00
百度不会吗
|
36
sirm2z 2017-09-06 15:37:23 +08:00
js 自带:
``` var number = 1000 number.toLocaleString('zh-Hans-CN-u-nu-hanidec') ``` |
37
LancerEvo 2017-09-06 15:46:26 +08:00
|
40
ipconfiger 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])]])) |
41
szopen 2017-09-06 16:35:01 +08:00
|
42
ipconfiger 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)))) |
44
zhx1991 2017-09-06 23:35:31 +08:00
一百二 120
两百零二 202 两百二 220 |
45
asj 2017-09-07 08:21:38 +08:00
|
46
calebx 2017-09-07 11:25:19 +08:00
|