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作了特殊的处理,读者可以慢慢品味。

    工欲善其事必先利其器
  • 相关阅读:
    原生ajax四部曲
    jquery ajax参数
    java String format占位符
    servlet是什么
    直接插入排序算法
    通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的--20135334赵阳林
    信息安全系统设计基础第一周学习总结
    信息安全系统设计基础实验五:通讯协议设计
    信息安全系统设计第二次&第四次实验
    信息安全系统设计基础第一次实验报告
  • 原文地址:https://www.cnblogs.com/CodeGuy/p/3069264.html
Copyright © 2011-2022 走看看