number_to_cn 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.DS_Store +0 -0
- data/README.md +4 -4
- data/lib/number_to_cn/methods.rb +45 -45
- data/lib/number_to_cn/version.rb +1 -1
- data/spec/number_to_cn_spec.rb +24 -0
- metadata +3 -3
data/.DS_Store
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -22,13 +22,13 @@ so simple to use:
|
|
22
22
|
|
23
23
|
require 'number_to_cn'
|
24
24
|
|
25
|
-
123.to_cn_words
|
25
|
+
123.to_cn_words #=> 壹佰贰拾叁
|
26
26
|
|
27
|
-
123.to_cn_clearly #=>
|
27
|
+
123.to_cn_clearly #=> 壹贰叁
|
28
28
|
|
29
|
-
0.1.to_cn_words
|
29
|
+
0.1.to_cn_words #=> 零点壹
|
30
30
|
|
31
|
-
0.to_cn_words
|
31
|
+
0.to_cn_words #=> 零
|
32
32
|
|
33
33
|
## Contributing
|
34
34
|
|
data/lib/number_to_cn/methods.rb
CHANGED
@@ -1,59 +1,59 @@
|
|
1
1
|
#encoding:utf-8
|
2
2
|
module NumberToCn
|
3
|
-
CN_T_TRANS
|
3
|
+
CN_T_TRANS = [ "", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" ]
|
4
4
|
CN_T_TRANS_WITH_ZERO = [ "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" ]
|
5
|
-
CN_T_POSITION
|
6
|
-
CN_T_BIG
|
5
|
+
CN_T_POSITION = [ "", "拾", "佰", "仟" ]
|
6
|
+
CN_T_BIG = [ "", "萬", "亿", "萬" ]
|
7
7
|
|
8
8
|
def to_cn_words
|
9
9
|
if self.class == Fixnum
|
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
|
-
rst_arr << aa + bb + cc
|
10
|
+
int_words
|
11
|
+
elsif self.class == Float
|
12
|
+
float_words
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def int_words
|
17
|
+
return "零" if self == 0
|
18
|
+
|
19
|
+
num_arr = self.to_s.split('').reverse
|
20
|
+
rst_arr = []
|
21
|
+
|
22
|
+
writable = -1
|
23
|
+
#1: 都需要写;
|
24
|
+
#0: 写一个零,后面的'千'不用写;
|
25
|
+
#-1:不需要写'千',也不需要写'零';
|
26
|
+
|
27
|
+
num_arr.each_with_index do |value, index|
|
28
|
+
writable = -1 if index%4 == 0
|
29
|
+
cc = (index%4 == 0) ? CN_T_BIG[index/4] : ""
|
30
|
+
aa = CN_T_TRANS[value.to_i]
|
31
|
+
|
32
|
+
if value.to_i == 0
|
33
|
+
bb = (writable == 1) ? "零" : ""
|
34
|
+
writable = (writable == 1) ? 0 : -1
|
35
|
+
else
|
36
|
+
bb = CN_T_POSITION[index%4]
|
37
|
+
writable = 1
|
40
38
|
end
|
41
39
|
|
42
|
-
rst_arr
|
43
|
-
elsif self.class == Float
|
44
|
-
before_point = self.to_s.split(".")[0]
|
45
|
-
after_point = self.to_s.split(".")[1]
|
46
|
-
"#{before_point.to_i.to_cn_words}点#{after_point.to_i.to_cn_clearly}"
|
40
|
+
rst_arr << aa + bb + cc
|
47
41
|
end
|
42
|
+
|
43
|
+
rst_arr.reverse.join
|
44
|
+
end
|
45
|
+
|
46
|
+
def float_words
|
47
|
+
before_point = self.to_i
|
48
|
+
after_point = self.to_s.split(".")[1]
|
49
|
+
after_point_zero = "零" * (after_point.length - after_point.to_i.to_s.length)
|
50
|
+
"#{before_point.int_words}点#{after_point_zero}#{after_point.to_i.to_cn_clearly}"
|
48
51
|
end
|
49
52
|
|
50
53
|
def to_cn_clearly
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
rst
|
54
|
+
to_s.split('')
|
55
|
+
.delete_if{ |c| c =~ /\D/ }
|
56
|
+
.map{ |c| CN_T_TRANS_WITH_ZERO[c.to_i] }
|
57
|
+
.join
|
57
58
|
end
|
58
|
-
|
59
59
|
end
|
data/lib/number_to_cn/version.rb
CHANGED
data/spec/number_to_cn_spec.rb
CHANGED
@@ -6,10 +6,34 @@ describe NumberToCn do
|
|
6
6
|
(2203.to_cn_words).should eq("贰仟贰佰零叁")
|
7
7
|
end
|
8
8
|
|
9
|
+
it "should go works for 2003" do
|
10
|
+
(2003.to_cn_words).should eq("贰仟零叁")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should go works for 20003" do
|
14
|
+
(20003.to_cn_words).should eq("贰萬零叁")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should go works for 200003" do
|
18
|
+
(200003.to_cn_words).should eq("贰拾萬零叁")
|
19
|
+
end
|
20
|
+
|
9
21
|
it "worked for zero" do
|
10
22
|
(0.to_cn_words).should eq("零")
|
11
23
|
end
|
12
24
|
|
25
|
+
it "worked for 0.0" do
|
26
|
+
(0.0.to_cn_words).should eq("零点零")
|
27
|
+
end
|
28
|
+
|
29
|
+
it "worked for 0.003" do
|
30
|
+
(0.003.to_cn_words).should eq("零点零零叁")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "worked for 0.0" do
|
34
|
+
(0.02.to_cn_words).should eq("零点零贰")
|
35
|
+
end
|
36
|
+
|
13
37
|
it "worked for float" do
|
14
38
|
((33.0).to_cn_words).should eq("叁拾叁点零")
|
15
39
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: number_to_cn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-09-03 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: simply gem for put digits number into cn.
|
15
15
|
email:
|
@@ -53,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
53
|
version: '0'
|
54
54
|
requirements: []
|
55
55
|
rubyforge_project:
|
56
|
-
rubygems_version: 1.8.
|
56
|
+
rubygems_version: 1.8.23
|
57
57
|
signing_key:
|
58
58
|
specification_version: 3
|
59
59
|
summary: ! '123.to_cn_words #'
|