分享

罗马数字的戏法

 张春强2022 2017-04-03

哈喽,诸君安。笔者在查找有关正则表达式的命令时,发现了几个有趣的命令,有关于罗马数字、阿拉伯数字以及十进位数字之间的转换,今天小编就给大家介绍一下这几个命令。

罗马数字转十进位数字-fromroman

1.fromroman命令语法结构如下:

fromroman romanvar [if] [in], generate(numvar) [re(regex)]

其中,romanvar是含有罗马数字的变量;gen(numvar)表示生成一个名称为numvar的十进位数字变量;[re(regex)]为正则表达式选项,说明fromroman可以结合正则表达式使用。

2.罗马数字介绍:

(1)相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;

(2)小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;

(3)小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;

(4)正常使用时、连写的数字重复不得超过三次;

(5)在一个数的上面画一条横线、表示这个数扩大 1000 倍。

3.例子说明:

我们手动输入几个罗马数字,程序如下:

clear

set more off

input str10 roman

'V I'

'V ii'

'v   iii'

'IX'

'X'

'CVI'

'CVII'

'CVIII'

'CIX'

'CX'

end

运行结果如下:

上图是列举的是10个罗马数字,下面用fromroman命令把其转换为十进位数字,程序如下:

·fromroman roman ,gen(v1)

运行结果如下:

新生成的变量v1就是罗马数字对应的十进位数。需要注意的是:

(1)使用fromroman函数,如果罗马数字中有小写字母(如第2、3行),将会把小写字母变为大写字母识别,也就是说用fromroman函数将罗马数字转为十进位数时,是不区分大小写的。

(2)用fromroman函数,会忽略所有空格。例如第1、2、3行中,罗马数字VI、VII、VIII中间有一个或多个空格,而这些空格在转换时都会被忽略掉,因此,它们并没有影响上述的转换结果。

[re(regex)]选项代表正则表达式,假如你只想把以“V”开头或者以“C”开头且以“X”结尾的罗马数字转换为十进位数字,那么这时候就得用到正则表达式了,程序如下:

·fromroman roman ,gen(v2) re(^V)

·fromroman roman ,gen(v3) re(^C.+I$)

运行结果如下:

其中,“^V”表示匹配以“V”开头的罗马数字,元字符“^”是一个位置元字符,表示匹配字符串的开头位置;“^C.+I$”表示匹配以“C”开头且以“X”结尾的罗马数字,元字符“$”也是一个位置元字符,表示匹配字符串的结尾位置,“.+”表示一个多多个任意字符串。

十进位数转罗马数字-toroman

1.toroman命令语法结构如下:

toroman numvar [if] [in], generate(romanvar) [lower]

其中,numvar是含有十进位数的变量;gen(romanvar)表示生成一个名称为romanvar的罗马数字的变量; [lower]是将大写罗马数字改为小写。

2.例子说明:

我们输入十进位数字1-10,然后用toroman函数将其转换为罗马数字,程序如下:

clear

set more off

input num

1

2

3

4

5

6

7

8

9

10

end

toroman num ,gen(roman1)

toroman num ,gen(roman2) lower

运行结果如下:

通过toroman命令,我们将十进位数转换为了罗马数字(对应变量roman1、roman2),这里需要注意

(1)加上lower之后,所有的罗马数字都将变为小写;

(2)负数、0、小数是不能被转为罗马数字的。

罗马数字转为阿拉伯数字- romantoarabic

1.romantoarabic命令语法结构如下:

romantoarabic romanvar [if exp] [in range] , generate(arabicvar)

其中,romanvar是含有罗马数字的变量;gen(arabicvar)表示生成一个名称为arabicvar的阿拉伯数字(默认为十进位制,事实上romantoarbic命令和fromroman命令得到的结果是一样的,都是十进位制的阿拉伯数字)的变量。

2.例子说明:

我们依然手动输入10个罗马数字,然后用romantoarabic命令将其转为阿拉伯数字。

程序如下:

·romantoarabic roman ,gen(arabicvar) 

显然,romantoarabic命令在转换时也是不区分大小写的。


以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑:徐苾雯

技术总编:刘贝贝



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多