简单了解下罗马数字

罗马数字从左到右读取。它们是通过基于加减法组合七个字母而形成的。数字的顺序表明是否需要减去或添加值。要记住的是,较大的值通常写在较小的值之前,阅读罗马数字的两个基本规则如下:

  • 如果一个字母出现在一个更大的字母之前,则减去。
  • 如果一个或多个字母出现在一个更大的字母之后,则添加。 

第一条规则意味着当一个较小的值放在一个较大的值之前时,差异是要读取的罗马数字。例如:

  • IV = 4 
  • IX = 9
  • XL = 40 
  • XC = 90
  • CM = 900

第二条规则意味着当一个较小的值放在一个较大的值之后时,总和就是要读取的罗马数字。例如:

  • VII = 7
  • XII = 12
  • LIII = 53
  • CXIII = 113
  • LXXV = 75

能耐心看到这定力还不错哈~特奉上H5转换器自行实用哈

罗马数字转换

罗马数字字母表

罗马数字阿拉伯数字中文数字
I1
V5
X10
L50五十
C100一百
D500五百
M1000一千

罗马数字1到10对照表

罗马数字通常从左到右从大到小写。然而,并不是所有情况都按照这个惯例。罗马人不喜欢连续写四个相同的数字,所以他们开发了一种减法系统,较小的数字在较大的数字之前,必须在这里进行减去例如数字四写为' IV '

这里面有I (1) 在V (5) 之前,因较小的数在较大之前须减去,使IV变为四.

罗马数字阿拉伯数字计算方式
I11
II21+1
III31+1+1
IV45-1
V55
VI65+1
VII75+1+1
VIII85+1+1+1
IX910-1
X1010

罗马数字1到100对照表

罗马数字阿拉伯数字计算公式
I11
II21+1
III31+1+1
IV45-1
V55
VI65+1
VII75+1+1
VIII85+1+1+1
IX910-1
X1010
XI1110+1
XII1210+1+1
XIII1310+1+1+1
XIV1410-1+5
XV1510+5
XVI1610+5+1
XVII1710+5+1+1
XVIII1810+5+1+1+1
XIX1910-1+10
XX2010+10
XXI2110+10+1
XXII2210+10+1+1
XXIII2310+10+1+1+1
XXIV2410+10-1+5
XXV2510+10+5
XXVI2610+10+5+1
XXVII2710+10+5+1+1
XXVIII2810+10+5+1+1+1
XXIX2910+10-1+10
XXX3010+10+10
XXXI3110+10+10+1
XXXII3210+10+10+1+1
XXXIII3310+10+10+1+1+1
XXXIV3410+10+10-1+5
XXXV3510+10+10+5
XXXVI3610+10+10+5+1
XXXVII3710+10+10+5+1+1
XXXVIII3810+10+10+5+1+1+1
XXXIX3910+10+10-1+10
XL4050-10
XLI4150-10+1
XLII4250-10+1+1
XLIII4350-10+1+1+1
XLIV4450-10-1+5
XLV4550-10+5
XLVI4650-10+5+1
XLVII4750-10+5+1+1
XLVIII4850-10+5+1+1+1
XLIX4950-10-1+10
L5050
LI5150+1
LII5250+1+1
LIII5350+1+1+1
LIV5450-1+5
LV5550+5
LVI5650+5+1
LVII5750+5+1+1
LVIII5850+5+1+1+1
LIX5950-1+10
LX6050+10
LXI6150+10+1
LXII6250+10+1+1
LXIII6350+10+1+1+1
LXIV6450+10-1+5
LXV6550+10+5
LXVI6650+10+5+1
LXVII6750+10+5+1+1
LXVIII6850+10+5+1+1+1
LXIX6950+10-1+10
LXX7050+10+10
LXXI7150+10+10+1
LXXII7250+10+10+1+1
LXXIII7350+10+10+1+1+1
LXXIV7450+10+10-1+5
LXXV7550+10+10+5
LXXVI7650+10+10+5+1
LXXVII7750+10+10+5+1+1
LXXVIII7850+10+10+5+1+1+1
LXXIX7950+10+10-1+10
LXXX8050+10+10+10
LXXXI8150+10+10+10+1
LXXXII8250+10+10+10+1+1
LXXXIII8350+10+10+10+1+1+1
LXXXIV8450+10+10+10-1+5
LXXXV8550+10+10+10+5
LXXXVI8650+10+10+10+5+1
LXXXVII8750+10+10+10+5+1+1
LXXXVIII8850+10+10+10+5+1+1+1
LXXXIX8950+10+10+10-1+10
XC90100-10
XCI91100-10+1
XCII92100-10+1+1
XCIII93100-10+1+1+1
XCIV94100-10-1+5
XCV95100-10+5
XCVI96100-10+5+1
XCVII97100-10+5+1+1
XCVIII98100-10+5+1+1+1
XCIX99100-10-1+10
C100100

罗马数字100到1000对照表

罗马数字阿拉伯数字计算公式
C100100
CC200100+100
CCC300100+100+100
CD400500-100
D500500
DC600500+100
DCC700500+100+100
DCCC800500+100+100+100
CM9001000-100
M10001000

罗马数字1000到1000000对照表

罗马数字阿拉伯数字中文数字
M1000一千
MM2000二千
MMM3000三千
MMMM4000四千
V5000五千
X10000一万
L50000五万
C100000十万
D500000五十五
M1000000一百万

H5转换代码附出处

出处:https://blog.csdn.net/weixin_34403976/article/details/88620721

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>罗马数字转换</title>
  <style>
    div {
      font-size: 20px
    }
    .showBox,.btnBox,h1 {
      overflow: hidden;
      width: 600px;
      padding: 0;
      margin: 0;
      color: #333
    }
    ul {
      list-style-type: none;
    }
    li {
      float: left;
      line-height: 80px;
      height: 80px;
    }
    .lab {
      text-align: right;
      width:40%;
    }
    .Txt {
      width: 60%;
    }
    .ipt {
      width: 90%;
      height: 40px;
      border-radius: 5px;
      border: 1px solid #ccc;
      font-size: 24px;
      padding: 0 10px;
    }
    .txtBox {
      width: 90%;
      height: 40px;
      border-radius: 5px;
      border: 1px solid #ccc;
      font-size: 24px;
      padding: 0 10px;
      background: #f8f8f8
    }
    .btnBox {
      text-align: center;
    }
    .btnBox>button {
      display: inline-block;
      height: 40px;
      font-size: 20px;
      line-height: 40px;
      padding: 0 20px;
      border-radius:5px;
      border: none;
      background: #00CCFF;
      outline: none;
    }
    .btnBox>button:active {
      background: #00CCCC;
    }
    button>span {
      color: red;
    }
    h1 {
      padding-bottom: 30px;
      text-align: center;
    }
    .cont {
      float: left;
      padding: 30px 10px 50px;
      border: 3px solid #999;
      border-radius:20px;
    }
    .test {
      text-align: center;
      color: red;
      font-size: 22px;
      height: 30px;
      line-height: 30px;
      /* display: none; */
    }
  </style>
</head>
<body>
  <div class="cont">
    <h1>罗马数字转换</h1>
    <div id="test" class="test"></div>
    <ul class="showBox">
      <li class="lab"><span type1>阿拉伯数字</span>:</li>
      <li class="Txt">
        <input type="text" class="ipt" placeholder="请输入数字" id="setIpt" onkeyup="window._o.flag==0 ? (value=value.replace(/[^\d]/g,'')) : value=value.toUpperCase()">
      </li>
      <li class="lab"><span type2>罗马数字</span>:</li>
      <li class="Txt">
        <input type="text" class="txtBox" id="showIpt" readonly>
      </li>
    </ul>
    <div class="btnBox">
      <button id="_exChange">切换为 <span type2>罗马数字</span> 转 <span type1>阿拉伯数字</span></button>
      <button id="_clear">清除</button>
      <button id="_switch">计算</button>
    </div>
    
  </div>
</body>
<script>
  (function(_win){
    let _set = document.querySelector('#setIpt'),
        _show = document.querySelector('#showIpt'),
        _switch = document.querySelector('#_switch'),
        _clear = document.querySelector('#_clear'),
        _exChange = document.querySelector('#_exChange'),
        type1 = document.querySelectorAll('[type1]'),
        type2 = document.querySelectorAll('[type2]'),
        _test = document.querySelector('#test')
    let o = {
      flag: 0, // 0:转 罗马数字 1:转 阿拉伯数字
      type: ['罗马数字','阿拉伯数字'],
      _box:['I','V','X','L','C','D','M'],
      test_box:[
        'IIII','XXXX','CCCC','MMMM','DD','LL','VV',
        'IIV','IIX','XXL','XXC','CCD','CCM',
        'IL','IC','ID','IM','XD','XM',
        'IVI','IXI','XLX','XCX','CDC','CMC',
        'VX','VL','VC','VD','VM','LC','LD','LM','DM',
        ],
      _symbol:[
        ['','I','II','III','IV','V','VI','VII','VIII','IX'],
        ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'],
        ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'],
        ['','M','MM','MMM']
      ],
      clear() {
        _set.value = ''
        _show.value = ''
        _set.focus()
      },
      Rome() {  // 转罗马
        let _val = _set.value,
             l = _val.length,
           _v1 = Number(l>0 ? _val.slice(l-1,l) : 0),
           _v2 = Number(l>1 ? _val.slice(l-2,l-1) : 0),
           _v3 = Number(l>2 ? _val.slice(l-3,l-2) : 0),
           _v4 = Number(l>3 ? _val.slice(0,l-3) : 0),
            _v = Number('' + _v4 + _v3 + _v2 + _v1)
        if( _v <= 0) {
          _test.innerText = '请输入大于0的整数!'
          o.clear()
          return
        }else if( _v >= 4000) {
          _test.innerText = '本题仅支持小于4000的正整数,请重新输入!'
          o.clear()
          return
        }
        let m1 = o._symbol[0][_v1],
            m2 = o._symbol[1][_v2],
            m3 = o._symbol[2][_v3],
            m4 = o._symbol[3][_v4]
        _show.value = '' + m4 + m3+ m2 + m1
      },
      Arab() {  // 转阿拉伯
        let _val = _set.value,
               l = _val.length,
             con = _val.split(''),
           _bool = false,
          symStr = '',
       symStrAll = [],
        reduce_l = 0
        con.forEach((d)=> {
          if(!o._box.includes(d)) {
            _bool = true
          }
        })
        if(_bool) {
          _test.innerText = '请输入合法的罗马字符!'
          o.clear()
          return
        }
        function querySym(str,ind) {
          str--
          symStr = l>str ? _val.slice(l-str-1,l-reduce_l) : ''
          if(o.test_box.includes(symStr)) {
            _test.innerText = '请输入合法的罗马字符!'
            setTimeout(()=>{
              o.clear()
            })
            return
          }
          let setObj = {
              index: ind,
              val: o._symbol[ind].indexOf(symStr) == -1 ? 0 : o._symbol[ind].indexOf(symStr)
            }
          if(o._symbol[ind] && o._symbol[ind].includes(symStr)) {
            symStrAll[ind] = setObj
            ind++
            reduce_l = reduce_l + symStr.length
            return
          }else {
            symStrAll[ind] = setObj
          }
          if(str==0) return
          querySym(str,ind)
        }
        o._symbol.forEach((d,i)=>{
          querySym(l,i)
        })
        // 赋值
        let lastStr = []
        symStrAll.forEach((v,i)=> {
          lastStr[i] = v.val
        })
        _show.value = Number(lastStr.reverse().toString().replace(/,/g,'')) || ''
      }
    }
    _win._o = o
    // switch
    _switch.onclick = function (e) {
      o.flag == 0 ? o.Rome() : o.Arab()
    }
    _set.oninput = function (e) {
      this.value = this.value.trim()
      _show.value = ''
      _test.innerText = ''
    }
    // clear
    _clear.onclick = function () {
      o.clear()
    }
    // exChange
    _exChange.onclick = function () {
      o.clear()
      o.flag = o.flag ? 0 : 1
      type1.forEach((s,i)=> {
        s.innerText = o.type[o.flag ? 0 : 1]
      })
      type2.forEach((s,i)=> {
        s.innerText = o.type[o.flag]
      })
    }
  })(window)
</script>
</html>

B0ae个人成长计划-让,进步发生
----利她,有价值,不打扰----

Comments | 4 条评论
  • 二猫

    学废了,学废了

  • 王云子

    这也太复杂了,脑壳痛😱

    • Ayiya1997

      @王云子 ~就是工作中有用到简单了解整理 下随用随看就好😄

消息盒子
# 您需要首次评论以获取消息 #
# 您需要首次评论以获取消息 #

只显示最新10条未读和已读信息