Ruby代码
: 用Ruby做中文数字和阿拉伯数字之间的互相转换
001
#中文数字和阿拉伯数字之间的互相转换
002
# 比如: 138 <=> 一百三十八
003
#
004
#作者: 半瓶墨水 http://www.2maomao.com/blog/
005
$KCODE
=
'u'
006
require
'jcode'
007
require
'iconv'
008
009
$cn_nums
=
%w{零 一 二 三 四 五 六 七 八 九}
010
$cn_decs
=
%w{十 百 千 万 十 百 千 亿}
011
$conv
=
Iconv
.
new
(
'gbk'
,
'utf-8'
)
012
013
$cn_nums_map
=
{
014
'〇'
=>
0
,
015
'一'
=>
1
,
016
'二'
=>
2
,
017
'三'
=>
3
,
018
'四'
=>
4
,
019
'五'
=>
5
,
020
'六'
=>
6
,
021
'七'
=>
7
,
022
'八'
=>
8
,
023
'九'
=>
9
,
024
025
'零'
=>
0
,
026
'壹'
=>
1
,
027
'贰'
=>
2
,
028
'叁'
=>
3
,
029
'肆'
=>
4
,
030
'伍'
=>
5
,
031
'陆'
=>
6
,
032
'柒'
=>
7
,
033
'捌'
=>
8
,
034
'玖'
=>
9
,
035
036
'貮'
=>
2
,
037
'两'
=>
2
,
038
}
039
040
$cn_decs_map
=
{
041
'个'
=>
1
,
042
'十'
=>
10
,
043
'拾'
=>
10
,
044
'百'
=>
100
,
045
'佰'
=>
100
,
046
'千'
=>
1000
,
047
'仟'
=>
1000
,
048
'万'
=>
10000
,
049
'萬'
=>
10000
,
050
'亿'
=>
100000000
,
051
'億'
=>
100000000
,
052
'兆'
=>
1000000000000
,
053
}
054
055
def
uputs
(
str
)
056
puts
$conv
.
iconv
(
str
)
057
end
058
059
class
NumCnConv
060
private
061
def
digit2cn
(
d
)
062
$cn_nums
[
d
-
'0'
[
0
]]
063
end
064
def
is_all_zero
(
str
)
065
return
str
==
(
'0'
*
str
.
size
)
066
end
067
068
public
069
def
num2cn
(
num
)
070
str
=
num
.
to_s
071
# print str + ":"
072
result
=
[]
073
str
=
str
.
reverse
074
zero_count
=
0
#zero_count after last non-zero digit
075
index
=
0
#the index for the numbers
076
first_zero
=
true
#don't need to insert 零 for numbers like /[1-9]+0+/
077
str_wan_yi
=
nil
#insert 万 & 亿 when needed
078
while
index
<
str
.
size
do
#3 0423 4829
079
d
=
str
[
index
]
080
#puts "index = #{index} (#{d.chr})"
081
if
(
d
-
'0'
[
0
]
>
0
)
082
if
zero_count
>
0
083
zero_count
=
0
084
result
<<
digit2cn
(
'0'
[
0
]
)
if
!
first_zero
085
if
str_wan_yi
!=
nil
086
result
<<
str_wan_yi
087
str_wan_yi
=
nil
088
end
089
end
090
result
<<
$cn_decs
[
(
index
-
1
)
%
(
$cn_decs
.
size
)
]
if
index
>
0
091
result
<<
digit2cn
(
d
)
092
first_zero
=
false
093
else
094
if
(
index
>
0
&&
(
index
%
4
)
==
0
&&
!
is_all_zero
(
str
[
index
,
4
]
)
)
095
str_wan_yi
=
$cn_decs
[
(
index
-
1
)
%
(
$cn_decs
.
size
)
]
096
end
097
zero_count
+=
1
098
end
099
index
+=
1
100
end
101
if
zero_count
>
0
102
zero_count
=
0
103
result
<<
digit2cn
(
'0'
[
0
]
)
104
end
105
result
=
result
.
reverse
106
107
res
=
result
.
join
108
if
res
=~
/^一十/
109
res
=
res
[
'一'
.
size
,
res
.
size
-
'一'
.
size
]
110
end
111
# uputs res
112
return
res
113
end
114
115
def
cn2num
(
str
)
116
#remove 零
117
num_str
=
''
118
last
=
nil
119
str
.
scan
(
/./u
)
do
|
c
|
120
if
(
!
$cn_nums_map
[
c
]
&&
!
$cn_decs_map
[
c
]
)
121
uputs
"
#{
str
}
是个错误的数字串"
122
return
nil
123
end
124
num_str
+=
c
if
c
!=
'零'
125
last
=
c
126
end
127
if
num_str
=~
/^十/
128
num_str
=
'一'
+
num_str
129
end
130
131
sums
=
[]
132
temp_sum
=
0
133
last_num
=
0
134
num_str
.
scan
(
/./u
)
do
|
ch
|
135
if
num
=
$cn_nums_map
[
ch
]
136
last_num
=
num
137
else
138
dec
=
$cn_decs_map
[
ch
]
139
if
dec
<
10000
140
temp_sum
+=
last_num
*
dec
141
else
142
#find back for the one that exceeds current dec
143
sums
.
each_with_index
do
|
x
,
i
|
144
if
x
<
dec
*
10
#10 is here for situation like 两亿亿
145
sums
[
i
]
=
x
*
dec
146
else
147
break
148
end
149
end
150
temp_sum
+=
last_num
151
sums
<<
temp_sum
*
dec
152
temp_sum
=
0
153
end
154
last_num
=
0
155
end
156
end
157
sums
<<
temp_sum
+
last_num
158
159
sum
=
0
160
sums
.
each
do
|
x
|
161
sum
+=
x
162
end
163
return
sum
164
end
165
end
166
167
#$cn_nums_map.each do |key, value|
168
#uputs key + "=>" + value.to_s
169
#end
170
171
#myconv = NumCnConv.new
172
#puts myconv.cn2num('两亿亿')
173
174
#-------------------------------------------
175
#测试程序
176
require
'test\unit'
177
178
$td_map
=
{
179
#1 digit 个
180
'零'
=>
0
,
181
'一'
=>
1
,
182
'二'
=>
2
,
183
'三'
=>
3
,
184
'四'
=>
4
,
185
'五'
=>
5
,
186
'六'
=>
6
,
187
'七'
=>
7
,
188
'八'
=>
8
,
189
'九'
=>
9
,
190
191
#2 digits 十
192
'十'
=>
10
,
193
'十一'
=>
11
,
194
'二十'
=>
20
,
195
'二十一'
=>
21
,
196
197
#3 digits 百
198
'一百'
=>
100
,
199
'一百零一'
=>
101
,
200
'一百一十'
=>
110
,
201
'一百二十三'
=>
123
,
202
203
#4 digits 千
204
'一千'
=>
1000
,
205
'一千零一'
=>
1001
,
206
'一千零一十'
=>
1010
,
207
'一千一百'
=>
1100
,
208
'一千零二十三'
=>
1023
,
209
'一千二百零三'
=>
1203
,
210
'一千二百三十'
=>
1230
,
211
212
#5 digits 万
213
#@@@@
214
'一万'
=>
10000
,
215
'一万零一'
=>
10001
,
216
'一万零一十'
=>
10010
,
217
'一万零一百'
=>
10100
,
218
'一万一千'
=>
11000
,
219
'一万零一十一'
=>
10011
,
220
'一万零一百零一'
=>
10101
,
221
'一万一千零一'
=>
11001
,
222
'一万零一百一十'
=>
10110
,
223
'一万一千零一十'
=>
11010
,
224
'一万一千一百'
=>
11100
,
225
'一万一千一百一十'
分享到:
相关推荐
标题“ruby测试代码6”和描述“ruby测试代码6”暗示了这是一个关于使用Ruby语言进行的测试代码项目,可能涉及到不同的模块或者数据结构。标签“ruby测试代码6”进一步确认了这一主题。从压缩包子文件的文件名称列表...
在Ruby编程语言中,测试代码扮演着至关重要的角色,它确保了代码的质量和可靠性。"ruby测试代码1"可能指的是一个具体的测试用例或者测试框架的实例,用于验证Ruby程序的功能和性能。Ruby提供了多种测试工具,如...
ruby源代码 ruby源代码 ruby源代码 ruby源代码2
Ruby是一种强大的动态编程语言,广泛应用...综上所述,“Ruby测试代码7”涵盖了Ruby中的测试基础、特定模块(Map和Sound)的测试策略,以及测试文化的多个方面。理解并熟练运用这些知识,可以提升代码质量和开发效率。
ruby源代码 ruby源代码 ruby源代码 ruby源代码4
ruby源代码 ruby源代码 ruby源代码 ruby源代码3
总之,"ruby测试代码4"这个主题涵盖了Ruby语言的测试实践,包括使用RSpec或Minitest编写测试用例,使用数据文件进行数据驱动测试,以及如何利用覆盖率工具和持续集成服务来提升测试效率和代码质量。对于开发者来说,...
本篇文章将深入探讨如何使用Ruby和Selenium-Webdriver进行多测试用例的编写。 首先,我们需要了解Ruby的基本语法和面向对象编程的概念。Ruby是一种简洁、动态的编程语言,其语法清晰,易于阅读。在测试领域,Ruby常...
ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码
总之,"ruby测试代码2"涉及了Ruby中的测试实践,包括选择合适的测试框架,编写清晰的测试用例,以及使用数据文件来覆盖多种场景。通过有效的测试,开发者可以提高代码的可靠性,并减少bug的出现。
此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] fruits.each { |fruit| puts fruit } ``` 元编程是Ruby的另一个强大特性...
"ruby测试代码5"可能是一个关于Ruby编程的测试项目,可能包含了对特定功能或者模块的验证和调试。下面将详细讨论Ruby测试、代码组织结构以及与"Floor", "Weapon", "Rpg"相关的编程概念。 首先,测试在软件开发中至...
在这个“ruby+selenium-webdriver测试--第一个例子源代码”中,我们将探讨如何使用Ruby和Selenium-Webdriver实现自动化测试的初步步骤。 首先,我们需要安装必要的库。确保已经安装了Ruby,并通过RubyGems来安装...
Ruby 和 Selenium-Webdriver 是一种强大的组合,用于自动化 Web 应用程序的测试。这篇博客主要探讨了如何利用这两种工具来编写测试用例,并提供了源代码示例。在这个压缩包中,我们有一个名为 "test002" 的文件,很...
标题 "ruby测试代码8.rar" 暗示这是一个与Ruby编程语言相关的测试代码集合,可能是为了验证特定功能或实现特定逻辑而编写的。这个压缩包可能包含若干个Ruby脚本文件,用于展示或执行测试场景。 描述中的内容 "ruby...
Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...
Ruby源代码是实现这一语言的底层逻辑和功能的程序,通过阅读和分析Ruby源代码,我们可以深入理解其工作原理,这对于学习和优化Ruby应用程序至关重要。 Ruby的设计哲学是“程序员的生产力优先”,因此它的语法易于...
6. **测试**:Rails强调TDD(测试驱动开发),提供了如RSpec和MiniTest等测试工具,确保代码的质量和稳定性。 在"Ruby Cookbook Source"中,你可能会找到关于以上概念的具体示例代码,帮助你理解如何在实际项目中...
在本资源中,我们关注的是使用Ruby和Selenium-Webdriver进行自动化测试的源代码,具体为"test003"。Ruby是一种流行的、动态的、面向对象的编程语言,而Selenium-Webdriver则是一个强大的工具,允许我们对浏览器进行...
在Ruby编程语言中,测试代码是确保代码质量与功能正确性的重要组成部分。Ruby提供了一些强大的测试框架,如Test::Unit、MiniTest以及RSpec,它们帮助开发者编写可读性强、易于维护的测试用例。 Test::Unit是Ruby...