zoukankan      html  css  js  c++  java
  • 阿拉伯数字转换成罗马数字(二)

    如果你比较熟悉Excel,并且用过里面的ROMAN()这个函数,如下:

     Microsoft Excel 中 ROMAN 函数的公式语法和用法如下:

    语法

    ROMAN(number, [form])

    ROMAN 函数语法具有下列参数:

    • Number    必需。需要转换的阿拉伯数字。
    • Form    可选。一数字,指定所需的罗马数字类型。罗马数字的样式范围可以从经典到简化,随着 form 值的增加趋于简单。请参见下面的示例 ROMAN(499,0).

    说明

    • 如果数字为负,则返回错误值 #VALUE!。
    • 如果数字大于 3999,则返回错误值 #VALUE!。

    示例

    显然,微软Excel中的所谓古典罗马数字样式是和维基百科上对罗马数字的书写规则一致的,但是细心者会发现它的简明版罗马数字样式却不完全符合罗马数字的规则。也就是说微软基于原始定义来重新定义了罗马数字的简明样式。那么怎么来实现呢,代码如下:

    function num2roman(nVal,nMode )
    {
        var pChars = ['M','D','C','L','X','V','I'];
        var pValues = [1000,500,100,50,10,5,1];
        var nMaxIndex = pValues.length-1;
        var aRoman = "";
        for(var i=0 ; i<= Math.floor( nMaxIndex/2 ); i++)
        {
                var nIndex = 2 * i;
                var nDigit = Math.floor( nVal/pValues[nIndex] );
                if((nDigit%5)==4)
                {
                    var nIndex2 = (nDigit == 4) ? nIndex - 1 : nIndex - 2;
                    var nSteps = 0;
                    while( (nSteps < nMode) && (nIndex < nMaxIndex) )
                    {
                        nSteps++;
                        if( pValues[ nIndex2 ] - pValues[ nIndex + 1 ] <= nVal )
                            nIndex++;
                        else
                            nSteps = nMode;
                    }
                    aRoman += pChars[ nIndex ];
                    aRoman += pChars[ nIndex2 ];
                    nVal = nVal + pValues[ nIndex ];
                    nVal = nVal - pValues[ nIndex2 ];
                }
                else
                {
                    if( nDigit > 4 )
                        aRoman += pChars[ nIndex - 1 ];
                    for(var j=0 ; j<(nDigit % 5) ; j++)
                        aRoman += pChars[ nIndex ];
                    nVal %= pValues[ nIndex ];
                }
        }
        return aRoman;
    }

    它的简化规则其实就是根据罗马记数规则,对数字的数位中包含4或9作了特殊的处理,读者可以慢慢品味。

    工欲善其事必先利其器
  • 相关阅读:
    tar命令详解(很好的中文说明) zhumao
    Grep学习笔记(转载) zhumao
    Linux命令集(转载) zhumao
    GNU/Linux问题集 (好文章,好手册) zhumao
    Sed学习笔记(转载) zhumao
    加密和显示图片的PHP代码(可以使用) zhumao
    用wget使用认证用户从ftp站点下载文件 zhumao
    Sendmail学习笔记 ... (转载) zhumao
    一段垃圾代码,自己写的(发送图书馆新书通告) zhumao
    CLR自定义.NET控件制作(2)——添加自定义属性、方法和事件
  • 原文地址:https://www.cnblogs.com/CodeGuy/p/3069264.html
Copyright © 2011-2022 走看看