digit_delim 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/Rakefile +2 -2
- data/ReadMe.md +26 -1
- data/VERSION +1 -1
- data/digit_delim.gemspec +3 -3
- data/lib/kannum.rb +79 -5
- data/test/test_kannum.rb +87 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 625afdfd364ac8456d5ec626b34f4ab708445617
|
4
|
+
data.tar.gz: de8a149c6432e687a48dc0bae53aad19d40cf6b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f49c625cdc792c4ec22653be8a941562fb9e692a77ecd54fbb0904fbc2b9f03be1c4abf795b4f7711772e6b4099af834344f03ba52e991e7c7c017b762ffa532
|
7
|
+
data.tar.gz: 5fcecaf3132427733fac8a825b1b04e97f981f379547a60e3837dc240f7db78de6b815be77cff427e583c4d0660009566cce2f945dd71f301c13d0fe10a1e3f8
|
data/Rakefile
CHANGED
@@ -27,8 +27,8 @@ Jeweler::RubygemsDotOrgTasks.new
|
|
27
27
|
|
28
28
|
require 'rake/testtask'
|
29
29
|
Rake::TestTask.new(:test) do |test|
|
30
|
-
test.libs << '
|
31
|
-
test.pattern = 'test/**/
|
30
|
+
test.libs << 'test'
|
31
|
+
test.pattern = 'test/**/test*.rb'
|
32
32
|
test.verbose = true
|
33
33
|
end
|
34
34
|
|
data/ReadMe.md
CHANGED
@@ -13,7 +13,32 @@ provides the methods to separate a number with the delimiter for each 3 digits.
|
|
13
13
|
|
14
14
|
## Usage
|
15
15
|
|
16
|
-
|
16
|
+
```
|
17
|
+
# 漢数字 (String) を数値 (Fixnum) に変換
|
18
|
+
>> "百億".str_to_num
|
19
|
+
=> 10000000000
|
20
|
+
|
21
|
+
>> "12億3400万".str_to_num
|
22
|
+
=> 1234000000
|
23
|
+
|
24
|
+
# 数値を、漢数字に変換
|
25
|
+
>> "12億3400万".str_to_num.num_to_str
|
26
|
+
=> "12億3400万"
|
27
|
+
|
28
|
+
# 数字文字列に3桁区切りのカンマを入れる
|
29
|
+
>> "12億3400万".str_to_num.to_s.w_dm
|
30
|
+
=> "1,234,000,000"
|
31
|
+
|
32
|
+
# 4桁区切り
|
33
|
+
>> "12億3400万".str_to_num.to_s.w_dm(-1,4)
|
34
|
+
=> "12,3400,0000"
|
35
|
+
|
36
|
+
# 区切り付きの数字文字列を数値 (Float) に変換
|
37
|
+
>> "12億3400万".str_to_num.to_s.w_dm(-1,4).to_wof
|
38
|
+
=> 1234000000.0
|
39
|
+
```
|
40
|
+
|
41
|
+
See the test code in `test/` for more detail.
|
17
42
|
|
18
43
|
## Lisence
|
19
44
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/digit_delim.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: digit_delim 0.
|
5
|
+
# stub: digit_delim 0.2.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "digit_delim"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.2.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["YAMAMOTO, Masayuki"]
|
14
|
-
s.date = "2016-07-
|
14
|
+
s.date = "2016-07-30"
|
15
15
|
s.description = "methods of num-string formatter, converter which extends String class"
|
16
16
|
s.email = "martin.route66.blues+github@gmail.com"
|
17
17
|
s.extra_rdoc_files = [
|
data/lib/kannum.rb
CHANGED
@@ -112,6 +112,10 @@ module KanNum
|
|
112
112
|
tmp_str
|
113
113
|
end
|
114
114
|
|
115
|
+
RE_NUM_O = "-.0-9"
|
116
|
+
RE_NUM = "[#{RE_NUM_O}]+"
|
117
|
+
RE_NONNUM = "[^#{RE_NUM_O} ]"
|
118
|
+
|
115
119
|
# create parse tree for str:
|
116
120
|
# [ [[ num, Num, ... ], UnitNum], ... ]
|
117
121
|
#
|
@@ -128,11 +132,14 @@ module KanNum
|
|
128
132
|
if units.include?(c)
|
129
133
|
tmp = tmp_ary.join
|
130
134
|
# $stderr.puts "#{__method__} tmp: #{tmp}"
|
131
|
-
tmp = tmp.gsub(/([0-9]+)([^ 0-9])/, '\1 \2')
|
135
|
+
#tmp = tmp.gsub(/([0-9]+)([^ 0-9])/, '\1 \2')
|
136
|
+
tmp = tmp.gsub(/(#{RE_NUM})(#{RE_NONNUM})/, '\1 \2')
|
132
137
|
# $stderr.puts "#{__method__} tmp: #{tmp}"
|
133
|
-
tmp = tmp.gsub(/([^ 0-9])([0-9]+)/, '\1 \2')
|
138
|
+
#tmp = tmp.gsub(/([^ 0-9])([0-9]+)/, '\1 \2')
|
139
|
+
tmp = tmp.gsub(/(#{RE_NONNUM})(#{RE_NUM})/, '\1 \2')
|
134
140
|
|
135
|
-
tmp = tmp.gsub(/([^ 0-9])([^ 0-9])/, '\1 \2')
|
141
|
+
#tmp = tmp.gsub(/([^ 0-9])([^ 0-9])/, '\1 \2')
|
142
|
+
tmp = tmp.gsub(/(#{RE_NONNUM})(#{RE_NONNUM})/, '\1 \2')
|
136
143
|
# $stderr.puts "#{__method__} tmp: #{tmp}"
|
137
144
|
tmp = tmp.split(/\s+/)
|
138
145
|
# $stderr.puts "#{__method__} tmp: #{tmp}"
|
@@ -175,14 +182,16 @@ module KanNum
|
|
175
182
|
# $stderr.puts "#{__method__} tmp_ary: #{tmp_ary}"
|
176
183
|
a = 1
|
177
184
|
b = N_倍数[tmp_ary[-1]]
|
178
|
-
a = tmp_ary[0].to_i if tmp_ary.size > 1
|
185
|
+
#a = tmp_ary[0].to_i if tmp_ary.size > 1
|
186
|
+
a = tmp_ary[0].to_f if tmp_ary.size > 1
|
179
187
|
|
180
188
|
tmp += a*b
|
181
189
|
tmp_ary = []
|
182
190
|
end
|
183
191
|
end
|
184
192
|
# $stderr.puts "#{__method__} tmp_ary: #{tmp_ary}"
|
185
|
-
tmp += tmp_ary[0].to_i if tmp_ary.size != 0
|
193
|
+
#tmp += tmp_ary[0].to_i if tmp_ary.size != 0
|
194
|
+
tmp += tmp_ary[0].to_f if tmp_ary.size != 0
|
186
195
|
|
187
196
|
tmp_u = N_単位数[u]
|
188
197
|
if tmp_u.nil?
|
@@ -193,6 +202,11 @@ module KanNum
|
|
193
202
|
|
194
203
|
end
|
195
204
|
|
205
|
+
if ret - ret.to_i > 0.0
|
206
|
+
else
|
207
|
+
ret = ret.to_i
|
208
|
+
end
|
209
|
+
|
196
210
|
ret
|
197
211
|
end
|
198
212
|
|
@@ -207,11 +221,71 @@ module KanNum
|
|
207
221
|
ret
|
208
222
|
end
|
209
223
|
|
224
|
+
|
225
|
+
#
|
226
|
+
#
|
227
|
+
#
|
228
|
+
def self.convert_helper( num )
|
229
|
+
|
230
|
+
tmp = nil
|
231
|
+
N_単位数.each_pair do |k,v|
|
232
|
+
# $stderr.puts "#{__method__} #{k} #{v}"
|
233
|
+
if num >= v
|
234
|
+
tmp ||= k
|
235
|
+
tmp = k if not(tmp.nil?) and v > N_単位数[tmp]
|
236
|
+
# $stderr.puts "#{__method__} tmp: #{tmp}"
|
237
|
+
next
|
238
|
+
else
|
239
|
+
break
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
tmp
|
244
|
+
end
|
245
|
+
|
246
|
+
def self.convert_phase0( num )
|
247
|
+
ret = []
|
248
|
+
|
249
|
+
tmp_num = num
|
250
|
+
while tmp = convert_helper(tmp_num)
|
251
|
+
|
252
|
+
u = N_単位数[tmp]
|
253
|
+
r = tmp_num/u
|
254
|
+
ret << [r.to_i, tmp]
|
255
|
+
tmp_num -= r*u
|
256
|
+
end
|
257
|
+
|
258
|
+
ret << tmp_num if tmp_num != 0
|
259
|
+
ret
|
260
|
+
end
|
261
|
+
|
262
|
+
def self.convert_phase1( ary )
|
263
|
+
ary.flatten.join
|
264
|
+
end
|
265
|
+
|
266
|
+
def self.num_to_str( num )
|
267
|
+
|
268
|
+
tmp = convert_phase0(num)
|
269
|
+
# $stderr.puts "{#{__method__}}result0: #{tmp}"
|
270
|
+
ret = convert_phase1(tmp)
|
271
|
+
# $stderr.puts "result1: #{ret}"
|
272
|
+
|
273
|
+
ret
|
274
|
+
end
|
275
|
+
|
210
276
|
end
|
211
277
|
|
278
|
+
|
279
|
+
#
|
280
|
+
#
|
281
|
+
#
|
212
282
|
class String
|
213
283
|
def str_to_num; KanNum.str_to_num self; end
|
214
284
|
end
|
215
285
|
|
286
|
+
class Fixnum
|
287
|
+
def num_to_str; KanNum.num_to_str self; end
|
288
|
+
end
|
289
|
+
|
216
290
|
|
217
291
|
#### endof filename: .rb
|
data/test/test_kannum.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
#
|
2
2
|
# filename: test_kannum.rb
|
3
|
-
# To do this test case,
|
3
|
+
# To do this test case,
|
4
|
+
# ```
|
5
|
+
# rake test
|
6
|
+
# rake test TESTOPTS="--testcase=/KanNum/"
|
7
|
+
# rake test TESTOPTS="--name=/basic/"
|
8
|
+
# rake test TESTOPTS="--help"
|
9
|
+
#
|
10
|
+
# ```
|
11
|
+
#
|
4
12
|
#
|
5
13
|
require "helper"
|
6
14
|
require 'test/unit'
|
@@ -14,18 +22,28 @@ class TestKanNum < Test::Unit::TestCase
|
|
14
22
|
def setup
|
15
23
|
|
16
24
|
@pattern_t1 = "12億3456万"
|
25
|
+
@pattern_n1 = 12_3456_0000
|
26
|
+
|
17
27
|
@pattern_t2 = "100億"
|
28
|
+
@pattern_n2 = 100_0000_0000
|
18
29
|
@pattern_t21 = "百億"
|
19
30
|
@pattern_t22 = "100億"
|
20
31
|
|
21
32
|
@pattern_t3 = "2千億3千4百十万"
|
33
|
+
@pattern_n3 = 2000_3410_0000
|
22
34
|
@pattern_t31 = "2千億3千十万"
|
35
|
+
@pattern_n31 = 2000_3010_0000
|
23
36
|
@pattern_t32 = "2千億千十万"
|
37
|
+
@pattern_n32 = 2000_1010_0000
|
24
38
|
|
25
39
|
@pattern_t4 = "千百3十万"
|
40
|
+
@pattern_n4 = 1030_0000
|
26
41
|
@pattern_t5 = "参拾"
|
27
|
-
@
|
28
|
-
@
|
42
|
+
@pattern_n5 = 30
|
43
|
+
@pattern_t6 = "参"
|
44
|
+
@pattern_n6 = 3
|
45
|
+
@pattern_t7 = "拾"
|
46
|
+
@pattern_n7 = 10
|
29
47
|
|
30
48
|
end
|
31
49
|
|
@@ -39,31 +57,31 @@ class TestKanNum < Test::Unit::TestCase
|
|
39
57
|
assert_equal( exp, ret )
|
40
58
|
|
41
59
|
ret = @pattern_t1.str_to_num
|
42
|
-
exp =
|
60
|
+
exp = @pattern_n1
|
43
61
|
assert_equal( exp, ret )
|
44
62
|
|
45
63
|
ret = KanNum.str_to_num @pattern_t2
|
46
|
-
exp =
|
64
|
+
exp = @pattern_n2
|
47
65
|
assert_equal( exp, ret )
|
48
66
|
|
49
67
|
ret = KanNum.str_to_num @pattern_t21
|
50
|
-
exp =
|
68
|
+
exp = @pattern_n2
|
51
69
|
assert_equal( exp, ret )
|
52
70
|
|
53
71
|
ret = KanNum.str_to_num @pattern_t22
|
54
|
-
exp =
|
72
|
+
exp = @pattern_n2
|
55
73
|
assert_equal( exp, ret )
|
56
74
|
|
57
75
|
ret = KanNum.str_to_num @pattern_t3
|
58
|
-
exp =
|
76
|
+
exp = @pattern_n3
|
59
77
|
assert_equal( exp, ret )
|
60
78
|
|
61
79
|
ret = KanNum.str_to_num @pattern_t31
|
62
|
-
exp =
|
80
|
+
exp = @pattern_n31
|
63
81
|
assert_equal( exp, ret )
|
64
82
|
|
65
83
|
ret = KanNum.str_to_num @pattern_t32
|
66
|
-
exp =
|
84
|
+
exp = @pattern_n32
|
67
85
|
assert_equal( exp, ret )
|
68
86
|
|
69
87
|
ret = KanNum.str_to_num @pattern_t4
|
@@ -74,16 +92,28 @@ class TestKanNum < Test::Unit::TestCase
|
|
74
92
|
exp = 30
|
75
93
|
assert_equal( exp, ret )
|
76
94
|
|
77
|
-
ret = KanNum.str_to_num @
|
95
|
+
ret = KanNum.str_to_num @pattern_t6
|
78
96
|
exp = 3
|
79
97
|
assert_equal( exp, ret )
|
80
98
|
|
81
|
-
ret = KanNum.str_to_num @
|
99
|
+
ret = KanNum.str_to_num @pattern_t7
|
82
100
|
exp = 10
|
83
101
|
assert_equal( exp, ret )
|
84
102
|
|
85
103
|
end
|
86
104
|
|
105
|
+
def test_str_to_num
|
106
|
+
|
107
|
+
ret = "0.7億".str_to_num
|
108
|
+
exp = 7000_0000
|
109
|
+
assert_equal( exp, ret )
|
110
|
+
|
111
|
+
ret = "-5.2億".str_to_num
|
112
|
+
exp = -5_2000_0000
|
113
|
+
assert_equal( exp, ret )
|
114
|
+
|
115
|
+
end
|
116
|
+
|
87
117
|
def test_numable?
|
88
118
|
|
89
119
|
ret = KanNum.numable? @pattern_t1
|
@@ -96,6 +126,51 @@ class TestKanNum < Test::Unit::TestCase
|
|
96
126
|
|
97
127
|
end
|
98
128
|
|
129
|
+
def test_num_to_str
|
130
|
+
|
131
|
+
#
|
132
|
+
ret = 1_3200.num_to_str
|
133
|
+
exp = "1万3200"
|
134
|
+
assert_equal( exp, ret )
|
135
|
+
|
136
|
+
ret = @pattern_n1.num_to_str
|
137
|
+
exp = @pattern_t1
|
138
|
+
assert_equal( exp, ret )
|
139
|
+
|
140
|
+
ret = KanNum.num_to_str @pattern_n2
|
141
|
+
exp = @pattern_t2
|
142
|
+
assert_equal( exp, ret )
|
143
|
+
|
144
|
+
ret = KanNum.num_to_str @pattern_n3
|
145
|
+
exp = "2000億3410万"
|
146
|
+
assert_equal( exp, ret )
|
147
|
+
|
148
|
+
ret = @pattern_n31.num_to_str
|
149
|
+
exp = "2000億3010万"
|
150
|
+
assert_equal( exp, ret )
|
151
|
+
|
152
|
+
ret = @pattern_n32.num_to_str
|
153
|
+
exp = "2000億1010万"
|
154
|
+
assert_equal( exp, ret )
|
155
|
+
|
156
|
+
ret = @pattern_n4.num_to_str
|
157
|
+
exp = "1030万"
|
158
|
+
assert_equal( exp, ret )
|
159
|
+
|
160
|
+
ret = @pattern_n5.num_to_str
|
161
|
+
exp = "30"
|
162
|
+
assert_equal( exp, ret )
|
163
|
+
|
164
|
+
ret = @pattern_n6.num_to_str
|
165
|
+
exp = "3"
|
166
|
+
assert_equal( exp, ret )
|
167
|
+
|
168
|
+
ret = @pattern_n7.num_to_str
|
169
|
+
exp = "10"
|
170
|
+
assert_equal( exp, ret )
|
171
|
+
|
172
|
+
end
|
173
|
+
|
99
174
|
end
|
100
175
|
|
101
176
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: digit_delim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YAMAMOTO, Masayuki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|