See Release Notes
Long Term Support Release
Differences Between: [Versions 400 and 401]
1 <?php 2 3 namespace PhpOffice\PhpSpreadsheet\Calculation\MathTrig; 4 5 use PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled; 6 use PhpOffice\PhpSpreadsheet\Calculation\Exception; 7 use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; 8 9 class Roman 10 { 11 use ArrayEnabled; 12 13 private const VALUES = [ 14 45 => ['VL'], 15 46 => ['VLI'], 16 47 => ['VLII'], 17 48 => ['VLIII'], 18 49 => ['VLIV', 'IL'], 19 95 => ['VC'], 20 96 => ['VCI'], 21 97 => ['VCII'], 22 98 => ['VCIII'], 23 99 => ['VCIV', 'IC'], 24 145 => ['CVL'], 25 146 => ['CVLI'], 26 147 => ['CVLII'], 27 148 => ['CVLIII'], 28 149 => ['CVLIV', 'CIL'], 29 195 => ['CVC'], 30 196 => ['CVCI'], 31 197 => ['CVCII'], 32 198 => ['CVCIII'], 33 199 => ['CVCIV', 'CIC'], 34 245 => ['CCVL'], 35 246 => ['CCVLI'], 36 247 => ['CCVLII'], 37 248 => ['CCVLIII'], 38 249 => ['CCVLIV', 'CCIL'], 39 295 => ['CCVC'], 40 296 => ['CCVCI'], 41 297 => ['CCVCII'], 42 298 => ['CCVCIII'], 43 299 => ['CCVCIV', 'CCIC'], 44 345 => ['CCCVL'], 45 346 => ['CCCVLI'], 46 347 => ['CCCVLII'], 47 348 => ['CCCVLIII'], 48 349 => ['CCCVLIV', 'CCCIL'], 49 395 => ['CCCVC'], 50 396 => ['CCCVCI'], 51 397 => ['CCCVCII'], 52 398 => ['CCCVCIII'], 53 399 => ['CCCVCIV', 'CCCIC'], 54 445 => ['CDVL'], 55 446 => ['CDVLI'], 56 447 => ['CDVLII'], 57 448 => ['CDVLIII'], 58 449 => ['CDVLIV', 'CDIL'], 59 450 => ['LD'], 60 451 => ['LDI'], 61 452 => ['LDII'], 62 453 => ['LDIII'], 63 454 => ['LDIV'], 64 455 => ['LDV'], 65 456 => ['LDVI'], 66 457 => ['LDVII'], 67 458 => ['LDVIII'], 68 459 => ['LDIX'], 69 460 => ['LDX'], 70 461 => ['LDXI'], 71 462 => ['LDXII'], 72 463 => ['LDXIII'], 73 464 => ['LDXIV'], 74 465 => ['LDXV'], 75 466 => ['LDXVI'], 76 467 => ['LDXVII'], 77 468 => ['LDXVIII'], 78 469 => ['LDXIX'], 79 470 => ['LDXX'], 80 471 => ['LDXXI'], 81 472 => ['LDXXII'], 82 473 => ['LDXXIII'], 83 474 => ['LDXXIV'], 84 475 => ['LDXXV'], 85 476 => ['LDXXVI'], 86 477 => ['LDXXVII'], 87 478 => ['LDXXVIII'], 88 479 => ['LDXXIX'], 89 480 => ['LDXXX'], 90 481 => ['LDXXXI'], 91 482 => ['LDXXXII'], 92 483 => ['LDXXXIII'], 93 484 => ['LDXXXIV'], 94 485 => ['LDXXXV'], 95 486 => ['LDXXXVI'], 96 487 => ['LDXXXVII'], 97 488 => ['LDXXXVIII'], 98 489 => ['LDXXXIX'], 99 490 => ['LDXL', 'XD'], 100 491 => ['LDXLI', 'XDI'], 101 492 => ['LDXLII', 'XDII'], 102 493 => ['LDXLIII', 'XDIII'], 103 494 => ['LDXLIV', 'XDIV'], 104 495 => ['LDVL', 'XDV', 'VD'], 105 496 => ['LDVLI', 'XDVI', 'VDI'], 106 497 => ['LDVLII', 'XDVII', 'VDII'], 107 498 => ['LDVLIII', 'XDVIII', 'VDIII'], 108 499 => ['LDVLIV', 'XDIX', 'VDIV', 'ID'], 109 545 => ['DVL'], 110 546 => ['DVLI'], 111 547 => ['DVLII'], 112 548 => ['DVLIII'], 113 549 => ['DVLIV', 'DIL'], 114 595 => ['DVC'], 115 596 => ['DVCI'], 116 597 => ['DVCII'], 117 598 => ['DVCIII'], 118 599 => ['DVCIV', 'DIC'], 119 645 => ['DCVL'], 120 646 => ['DCVLI'], 121 647 => ['DCVLII'], 122 648 => ['DCVLIII'], 123 649 => ['DCVLIV', 'DCIL'], 124 695 => ['DCVC'], 125 696 => ['DCVCI'], 126 697 => ['DCVCII'], 127 698 => ['DCVCIII'], 128 699 => ['DCVCIV', 'DCIC'], 129 745 => ['DCCVL'], 130 746 => ['DCCVLI'], 131 747 => ['DCCVLII'], 132 748 => ['DCCVLIII'], 133 749 => ['DCCVLIV', 'DCCIL'], 134 795 => ['DCCVC'], 135 796 => ['DCCVCI'], 136 797 => ['DCCVCII'], 137 798 => ['DCCVCIII'], 138 799 => ['DCCVCIV', 'DCCIC'], 139 845 => ['DCCCVL'], 140 846 => ['DCCCVLI'], 141 847 => ['DCCCVLII'], 142 848 => ['DCCCVLIII'], 143 849 => ['DCCCVLIV', 'DCCCIL'], 144 895 => ['DCCCVC'], 145 896 => ['DCCCVCI'], 146 897 => ['DCCCVCII'], 147 898 => ['DCCCVCIII'], 148 899 => ['DCCCVCIV', 'DCCCIC'], 149 945 => ['CMVL'], 150 946 => ['CMVLI'], 151 947 => ['CMVLII'], 152 948 => ['CMVLIII'], 153 949 => ['CMVLIV', 'CMIL'], 154 950 => ['LM'], 155 951 => ['LMI'], 156 952 => ['LMII'], 157 953 => ['LMIII'], 158 954 => ['LMIV'], 159 955 => ['LMV'], 160 956 => ['LMVI'], 161 957 => ['LMVII'], 162 958 => ['LMVIII'], 163 959 => ['LMIX'], 164 960 => ['LMX'], 165 961 => ['LMXI'], 166 962 => ['LMXII'], 167 963 => ['LMXIII'], 168 964 => ['LMXIV'], 169 965 => ['LMXV'], 170 966 => ['LMXVI'], 171 967 => ['LMXVII'], 172 968 => ['LMXVIII'], 173 969 => ['LMXIX'], 174 970 => ['LMXX'], 175 971 => ['LMXXI'], 176 972 => ['LMXXII'], 177 973 => ['LMXXIII'], 178 974 => ['LMXXIV'], 179 975 => ['LMXXV'], 180 976 => ['LMXXVI'], 181 977 => ['LMXXVII'], 182 978 => ['LMXXVIII'], 183 979 => ['LMXXIX'], 184 980 => ['LMXXX'], 185 981 => ['LMXXXI'], 186 982 => ['LMXXXII'], 187 983 => ['LMXXXIII'], 188 984 => ['LMXXXIV'], 189 985 => ['LMXXXV'], 190 986 => ['LMXXXVI'], 191 987 => ['LMXXXVII'], 192 988 => ['LMXXXVIII'], 193 989 => ['LMXXXIX'], 194 990 => ['LMXL', 'XM'], 195 991 => ['LMXLI', 'XMI'], 196 992 => ['LMXLII', 'XMII'], 197 993 => ['LMXLIII', 'XMIII'], 198 994 => ['LMXLIV', 'XMIV'], 199 995 => ['LMVL', 'XMV', 'VM'], 200 996 => ['LMVLI', 'XMVI', 'VMI'], 201 997 => ['LMVLII', 'XMVII', 'VMII'], 202 998 => ['LMVLIII', 'XMVIII', 'VMIII'], 203 999 => ['LMVLIV', 'XMIX', 'VMIV', 'IM'], 204 1045 => ['MVL'], 205 1046 => ['MVLI'], 206 1047 => ['MVLII'], 207 1048 => ['MVLIII'], 208 1049 => ['MVLIV', 'MIL'], 209 1095 => ['MVC'], 210 1096 => ['MVCI'], 211 1097 => ['MVCII'], 212 1098 => ['MVCIII'], 213 1099 => ['MVCIV', 'MIC'], 214 1145 => ['MCVL'], 215 1146 => ['MCVLI'], 216 1147 => ['MCVLII'], 217 1148 => ['MCVLIII'], 218 1149 => ['MCVLIV', 'MCIL'], 219 1195 => ['MCVC'], 220 1196 => ['MCVCI'], 221 1197 => ['MCVCII'], 222 1198 => ['MCVCIII'], 223 1199 => ['MCVCIV', 'MCIC'], 224 1245 => ['MCCVL'], 225 1246 => ['MCCVLI'], 226 1247 => ['MCCVLII'], 227 1248 => ['MCCVLIII'], 228 1249 => ['MCCVLIV', 'MCCIL'], 229 1295 => ['MCCVC'], 230 1296 => ['MCCVCI'], 231 1297 => ['MCCVCII'], 232 1298 => ['MCCVCIII'], 233 1299 => ['MCCVCIV', 'MCCIC'], 234 1345 => ['MCCCVL'], 235 1346 => ['MCCCVLI'], 236 1347 => ['MCCCVLII'], 237 1348 => ['MCCCVLIII'], 238 1349 => ['MCCCVLIV', 'MCCCIL'], 239 1395 => ['MCCCVC'], 240 1396 => ['MCCCVCI'], 241 1397 => ['MCCCVCII'], 242 1398 => ['MCCCVCIII'], 243 1399 => ['MCCCVCIV', 'MCCCIC'], 244 1445 => ['MCDVL'], 245 1446 => ['MCDVLI'], 246 1447 => ['MCDVLII'], 247 1448 => ['MCDVLIII'], 248 1449 => ['MCDVLIV', 'MCDIL'], 249 1450 => ['MLD'], 250 1451 => ['MLDI'], 251 1452 => ['MLDII'], 252 1453 => ['MLDIII'], 253 1454 => ['MLDIV'], 254 1455 => ['MLDV'], 255 1456 => ['MLDVI'], 256 1457 => ['MLDVII'], 257 1458 => ['MLDVIII'], 258 1459 => ['MLDIX'], 259 1460 => ['MLDX'], 260 1461 => ['MLDXI'], 261 1462 => ['MLDXII'], 262 1463 => ['MLDXIII'], 263 1464 => ['MLDXIV'], 264 1465 => ['MLDXV'], 265 1466 => ['MLDXVI'], 266 1467 => ['MLDXVII'], 267 1468 => ['MLDXVIII'], 268 1469 => ['MLDXIX'], 269 1470 => ['MLDXX'], 270 1471 => ['MLDXXI'], 271 1472 => ['MLDXXII'], 272 1473 => ['MLDXXIII'], 273 1474 => ['MLDXXIV'], 274 1475 => ['MLDXXV'], 275 1476 => ['MLDXXVI'], 276 1477 => ['MLDXXVII'], 277 1478 => ['MLDXXVIII'], 278 1479 => ['MLDXXIX'], 279 1480 => ['MLDXXX'], 280 1481 => ['MLDXXXI'], 281 1482 => ['MLDXXXII'], 282 1483 => ['MLDXXXIII'], 283 1484 => ['MLDXXXIV'], 284 1485 => ['MLDXXXV'], 285 1486 => ['MLDXXXVI'], 286 1487 => ['MLDXXXVII'], 287 1488 => ['MLDXXXVIII'], 288 1489 => ['MLDXXXIX'], 289 1490 => ['MLDXL', 'MXD'], 290 1491 => ['MLDXLI', 'MXDI'], 291 1492 => ['MLDXLII', 'MXDII'], 292 1493 => ['MLDXLIII', 'MXDIII'], 293 1494 => ['MLDXLIV', 'MXDIV'], 294 1495 => ['MLDVL', 'MXDV', 'MVD'], 295 1496 => ['MLDVLI', 'MXDVI', 'MVDI'], 296 1497 => ['MLDVLII', 'MXDVII', 'MVDII'], 297 1498 => ['MLDVLIII', 'MXDVIII', 'MVDIII'], 298 1499 => ['MLDVLIV', 'MXDIX', 'MVDIV', 'MID'], 299 1545 => ['MDVL'], 300 1546 => ['MDVLI'], 301 1547 => ['MDVLII'], 302 1548 => ['MDVLIII'], 303 1549 => ['MDVLIV', 'MDIL'], 304 1595 => ['MDVC'], 305 1596 => ['MDVCI'], 306 1597 => ['MDVCII'], 307 1598 => ['MDVCIII'], 308 1599 => ['MDVCIV', 'MDIC'], 309 1645 => ['MDCVL'], 310 1646 => ['MDCVLI'], 311 1647 => ['MDCVLII'], 312 1648 => ['MDCVLIII'], 313 1649 => ['MDCVLIV', 'MDCIL'], 314 1695 => ['MDCVC'], 315 1696 => ['MDCVCI'], 316 1697 => ['MDCVCII'], 317 1698 => ['MDCVCIII'], 318 1699 => ['MDCVCIV', 'MDCIC'], 319 1745 => ['MDCCVL'], 320 1746 => ['MDCCVLI'], 321 1747 => ['MDCCVLII'], 322 1748 => ['MDCCVLIII'], 323 1749 => ['MDCCVLIV', 'MDCCIL'], 324 1795 => ['MDCCVC'], 325 1796 => ['MDCCVCI'], 326 1797 => ['MDCCVCII'], 327 1798 => ['MDCCVCIII'], 328 1799 => ['MDCCVCIV', 'MDCCIC'], 329 1845 => ['MDCCCVL'], 330 1846 => ['MDCCCVLI'], 331 1847 => ['MDCCCVLII'], 332 1848 => ['MDCCCVLIII'], 333 1849 => ['MDCCCVLIV', 'MDCCCIL'], 334 1895 => ['MDCCCVC'], 335 1896 => ['MDCCCVCI'], 336 1897 => ['MDCCCVCII'], 337 1898 => ['MDCCCVCIII'], 338 1899 => ['MDCCCVCIV', 'MDCCCIC'], 339 1945 => ['MCMVL'], 340 1946 => ['MCMVLI'], 341 1947 => ['MCMVLII'], 342 1948 => ['MCMVLIII'], 343 1949 => ['MCMVLIV', 'MCMIL'], 344 1950 => ['MLM'], 345 1951 => ['MLMI'], 346 1952 => ['MLMII'], 347 1953 => ['MLMIII'], 348 1954 => ['MLMIV'], 349 1955 => ['MLMV'], 350 1956 => ['MLMVI'], 351 1957 => ['MLMVII'], 352 1958 => ['MLMVIII'], 353 1959 => ['MLMIX'], 354 1960 => ['MLMX'], 355 1961 => ['MLMXI'], 356 1962 => ['MLMXII'], 357 1963 => ['MLMXIII'], 358 1964 => ['MLMXIV'], 359 1965 => ['MLMXV'], 360 1966 => ['MLMXVI'], 361 1967 => ['MLMXVII'], 362 1968 => ['MLMXVIII'], 363 1969 => ['MLMXIX'], 364 1970 => ['MLMXX'], 365 1971 => ['MLMXXI'], 366 1972 => ['MLMXXII'], 367 1973 => ['MLMXXIII'], 368 1974 => ['MLMXXIV'], 369 1975 => ['MLMXXV'], 370 1976 => ['MLMXXVI'], 371 1977 => ['MLMXXVII'], 372 1978 => ['MLMXXVIII'], 373 1979 => ['MLMXXIX'], 374 1980 => ['MLMXXX'], 375 1981 => ['MLMXXXI'], 376 1982 => ['MLMXXXII'], 377 1983 => ['MLMXXXIII'], 378 1984 => ['MLMXXXIV'], 379 1985 => ['MLMXXXV'], 380 1986 => ['MLMXXXVI'], 381 1987 => ['MLMXXXVII'], 382 1988 => ['MLMXXXVIII'], 383 1989 => ['MLMXXXIX'], 384 1990 => ['MLMXL', 'MXM'], 385 1991 => ['MLMXLI', 'MXMI'], 386 1992 => ['MLMXLII', 'MXMII'], 387 1993 => ['MLMXLIII', 'MXMIII'], 388 1994 => ['MLMXLIV', 'MXMIV'], 389 1995 => ['MLMVL', 'MXMV', 'MVM'], 390 1996 => ['MLMVLI', 'MXMVI', 'MVMI'], 391 1997 => ['MLMVLII', 'MXMVII', 'MVMII'], 392 1998 => ['MLMVLIII', 'MXMVIII', 'MVMIII'], 393 1999 => ['MLMVLIV', 'MXMIX', 'MVMIV', 'MIM'], 394 2045 => ['MMVL'], 395 2046 => ['MMVLI'], 396 2047 => ['MMVLII'], 397 2048 => ['MMVLIII'], 398 2049 => ['MMVLIV', 'MMIL'], 399 2095 => ['MMVC'], 400 2096 => ['MMVCI'], 401 2097 => ['MMVCII'], 402 2098 => ['MMVCIII'], 403 2099 => ['MMVCIV', 'MMIC'], 404 2145 => ['MMCVL'], 405 2146 => ['MMCVLI'], 406 2147 => ['MMCVLII'], 407 2148 => ['MMCVLIII'], 408 2149 => ['MMCVLIV', 'MMCIL'], 409 2195 => ['MMCVC'], 410 2196 => ['MMCVCI'], 411 2197 => ['MMCVCII'], 412 2198 => ['MMCVCIII'], 413 2199 => ['MMCVCIV', 'MMCIC'], 414 2245 => ['MMCCVL'], 415 2246 => ['MMCCVLI'], 416 2247 => ['MMCCVLII'], 417 2248 => ['MMCCVLIII'], 418 2249 => ['MMCCVLIV', 'MMCCIL'], 419 2295 => ['MMCCVC'], 420 2296 => ['MMCCVCI'], 421 2297 => ['MMCCVCII'], 422 2298 => ['MMCCVCIII'], 423 2299 => ['MMCCVCIV', 'MMCCIC'], 424 2345 => ['MMCCCVL'], 425 2346 => ['MMCCCVLI'], 426 2347 => ['MMCCCVLII'], 427 2348 => ['MMCCCVLIII'], 428 2349 => ['MMCCCVLIV', 'MMCCCIL'], 429 2395 => ['MMCCCVC'], 430 2396 => ['MMCCCVCI'], 431 2397 => ['MMCCCVCII'], 432 2398 => ['MMCCCVCIII'], 433 2399 => ['MMCCCVCIV', 'MMCCCIC'], 434 2445 => ['MMCDVL'], 435 2446 => ['MMCDVLI'], 436 2447 => ['MMCDVLII'], 437 2448 => ['MMCDVLIII'], 438 2449 => ['MMCDVLIV', 'MMCDIL'], 439 2450 => ['MMLD'], 440 2451 => ['MMLDI'], 441 2452 => ['MMLDII'], 442 2453 => ['MMLDIII'], 443 2454 => ['MMLDIV'], 444 2455 => ['MMLDV'], 445 2456 => ['MMLDVI'], 446 2457 => ['MMLDVII'], 447 2458 => ['MMLDVIII'], 448 2459 => ['MMLDIX'], 449 2460 => ['MMLDX'], 450 2461 => ['MMLDXI'], 451 2462 => ['MMLDXII'], 452 2463 => ['MMLDXIII'], 453 2464 => ['MMLDXIV'], 454 2465 => ['MMLDXV'], 455 2466 => ['MMLDXVI'], 456 2467 => ['MMLDXVII'], 457 2468 => ['MMLDXVIII'], 458 2469 => ['MMLDXIX'], 459 2470 => ['MMLDXX'], 460 2471 => ['MMLDXXI'], 461 2472 => ['MMLDXXII'], 462 2473 => ['MMLDXXIII'], 463 2474 => ['MMLDXXIV'], 464 2475 => ['MMLDXXV'], 465 2476 => ['MMLDXXVI'], 466 2477 => ['MMLDXXVII'], 467 2478 => ['MMLDXXVIII'], 468 2479 => ['MMLDXXIX'], 469 2480 => ['MMLDXXX'], 470 2481 => ['MMLDXXXI'], 471 2482 => ['MMLDXXXII'], 472 2483 => ['MMLDXXXIII'], 473 2484 => ['MMLDXXXIV'], 474 2485 => ['MMLDXXXV'], 475 2486 => ['MMLDXXXVI'], 476 2487 => ['MMLDXXXVII'], 477 2488 => ['MMLDXXXVIII'], 478 2489 => ['MMLDXXXIX'], 479 2490 => ['MMLDXL', 'MMXD'], 480 2491 => ['MMLDXLI', 'MMXDI'], 481 2492 => ['MMLDXLII', 'MMXDII'], 482 2493 => ['MMLDXLIII', 'MMXDIII'], 483 2494 => ['MMLDXLIV', 'MMXDIV'], 484 2495 => ['MMLDVL', 'MMXDV', 'MMVD'], 485 2496 => ['MMLDVLI', 'MMXDVI', 'MMVDI'], 486 2497 => ['MMLDVLII', 'MMXDVII', 'MMVDII'], 487 2498 => ['MMLDVLIII', 'MMXDVIII', 'MMVDIII'], 488 2499 => ['MMLDVLIV', 'MMXDIX', 'MMVDIV', 'MMID'], 489 2545 => ['MMDVL'], 490 2546 => ['MMDVLI'], 491 2547 => ['MMDVLII'], 492 2548 => ['MMDVLIII'], 493 2549 => ['MMDVLIV', 'MMDIL'], 494 2595 => ['MMDVC'], 495 2596 => ['MMDVCI'], 496 2597 => ['MMDVCII'], 497 2598 => ['MMDVCIII'], 498 2599 => ['MMDVCIV', 'MMDIC'], 499 2645 => ['MMDCVL'], 500 2646 => ['MMDCVLI'], 501 2647 => ['MMDCVLII'], 502 2648 => ['MMDCVLIII'], 503 2649 => ['MMDCVLIV', 'MMDCIL'], 504 2695 => ['MMDCVC'], 505 2696 => ['MMDCVCI'], 506 2697 => ['MMDCVCII'], 507 2698 => ['MMDCVCIII'], 508 2699 => ['MMDCVCIV', 'MMDCIC'], 509 2745 => ['MMDCCVL'], 510 2746 => ['MMDCCVLI'], 511 2747 => ['MMDCCVLII'], 512 2748 => ['MMDCCVLIII'], 513 2749 => ['MMDCCVLIV', 'MMDCCIL'], 514 2795 => ['MMDCCVC'], 515 2796 => ['MMDCCVCI'], 516 2797 => ['MMDCCVCII'], 517 2798 => ['MMDCCVCIII'], 518 2799 => ['MMDCCVCIV', 'MMDCCIC'], 519 2845 => ['MMDCCCVL'], 520 2846 => ['MMDCCCVLI'], 521 2847 => ['MMDCCCVLII'], 522 2848 => ['MMDCCCVLIII'], 523 2849 => ['MMDCCCVLIV', 'MMDCCCIL'], 524 2895 => ['MMDCCCVC'], 525 2896 => ['MMDCCCVCI'], 526 2897 => ['MMDCCCVCII'], 527 2898 => ['MMDCCCVCIII'], 528 2899 => ['MMDCCCVCIV', 'MMDCCCIC'], 529 2945 => ['MMCMVL'], 530 2946 => ['MMCMVLI'], 531 2947 => ['MMCMVLII'], 532 2948 => ['MMCMVLIII'], 533 2949 => ['MMCMVLIV', 'MMCMIL'], 534 2950 => ['MMLM'], 535 2951 => ['MMLMI'], 536 2952 => ['MMLMII'], 537 2953 => ['MMLMIII'], 538 2954 => ['MMLMIV'], 539 2955 => ['MMLMV'], 540 2956 => ['MMLMVI'], 541 2957 => ['MMLMVII'], 542 2958 => ['MMLMVIII'], 543 2959 => ['MMLMIX'], 544 2960 => ['MMLMX'], 545 2961 => ['MMLMXI'], 546 2962 => ['MMLMXII'], 547 2963 => ['MMLMXIII'], 548 2964 => ['MMLMXIV'], 549 2965 => ['MMLMXV'], 550 2966 => ['MMLMXVI'], 551 2967 => ['MMLMXVII'], 552 2968 => ['MMLMXVIII'], 553 2969 => ['MMLMXIX'], 554 2970 => ['MMLMXX'], 555 2971 => ['MMLMXXI'], 556 2972 => ['MMLMXXII'], 557 2973 => ['MMLMXXIII'], 558 2974 => ['MMLMXXIV'], 559 2975 => ['MMLMXXV'], 560 2976 => ['MMLMXXVI'], 561 2977 => ['MMLMXXVII'], 562 2978 => ['MMLMXXVIII'], 563 2979 => ['MMLMXXIX'], 564 2980 => ['MMLMXXX'], 565 2981 => ['MMLMXXXI'], 566 2982 => ['MMLMXXXII'], 567 2983 => ['MMLMXXXIII'], 568 2984 => ['MMLMXXXIV'], 569 2985 => ['MMLMXXXV'], 570 2986 => ['MMLMXXXVI'], 571 2987 => ['MMLMXXXVII'], 572 2988 => ['MMLMXXXVIII'], 573 2989 => ['MMLMXXXIX'], 574 2990 => ['MMLMXL', 'MMXM'], 575 2991 => ['MMLMXLI', 'MMXMI'], 576 2992 => ['MMLMXLII', 'MMXMII'], 577 2993 => ['MMLMXLIII', 'MMXMIII'], 578 2994 => ['MMLMXLIV', 'MMXMIV'], 579 2995 => ['MMLMVL', 'MMXMV', 'MMVM'], 580 2996 => ['MMLMVLI', 'MMXMVI', 'MMVMI'], 581 2997 => ['MMLMVLII', 'MMXMVII', 'MMVMII'], 582 2998 => ['MMLMVLIII', 'MMXMVIII', 'MMVMIII'], 583 2999 => ['MMLMVLIV', 'MMXMIX', 'MMVMIV', 'MMIM'], 584 3045 => ['MMMVL'], 585 3046 => ['MMMVLI'], 586 3047 => ['MMMVLII'], 587 3048 => ['MMMVLIII'], 588 3049 => ['MMMVLIV', 'MMMIL'], 589 3095 => ['MMMVC'], 590 3096 => ['MMMVCI'], 591 3097 => ['MMMVCII'], 592 3098 => ['MMMVCIII'], 593 3099 => ['MMMVCIV', 'MMMIC'], 594 3145 => ['MMMCVL'], 595 3146 => ['MMMCVLI'], 596 3147 => ['MMMCVLII'], 597 3148 => ['MMMCVLIII'], 598 3149 => ['MMMCVLIV', 'MMMCIL'], 599 3195 => ['MMMCVC'], 600 3196 => ['MMMCVCI'], 601 3197 => ['MMMCVCII'], 602 3198 => ['MMMCVCIII'], 603 3199 => ['MMMCVCIV', 'MMMCIC'], 604 3245 => ['MMMCCVL'], 605 3246 => ['MMMCCVLI'], 606 3247 => ['MMMCCVLII'], 607 3248 => ['MMMCCVLIII'], 608 3249 => ['MMMCCVLIV', 'MMMCCIL'], 609 3295 => ['MMMCCVC'], 610 3296 => ['MMMCCVCI'], 611 3297 => ['MMMCCVCII'], 612 3298 => ['MMMCCVCIII'], 613 3299 => ['MMMCCVCIV', 'MMMCCIC'], 614 3345 => ['MMMCCCVL'], 615 3346 => ['MMMCCCVLI'], 616 3347 => ['MMMCCCVLII'], 617 3348 => ['MMMCCCVLIII'], 618 3349 => ['MMMCCCVLIV', 'MMMCCCIL'], 619 3395 => ['MMMCCCVC'], 620 3396 => ['MMMCCCVCI'], 621 3397 => ['MMMCCCVCII'], 622 3398 => ['MMMCCCVCIII'], 623 3399 => ['MMMCCCVCIV', 'MMMCCCIC'], 624 3445 => ['MMMCDVL'], 625 3446 => ['MMMCDVLI'], 626 3447 => ['MMMCDVLII'], 627 3448 => ['MMMCDVLIII'], 628 3449 => ['MMMCDVLIV', 'MMMCDIL'], 629 3450 => ['MMMLD'], 630 3451 => ['MMMLDI'], 631 3452 => ['MMMLDII'], 632 3453 => ['MMMLDIII'], 633 3454 => ['MMMLDIV'], 634 3455 => ['MMMLDV'], 635 3456 => ['MMMLDVI'], 636 3457 => ['MMMLDVII'], 637 3458 => ['MMMLDVIII'], 638 3459 => ['MMMLDIX'], 639 3460 => ['MMMLDX'], 640 3461 => ['MMMLDXI'], 641 3462 => ['MMMLDXII'], 642 3463 => ['MMMLDXIII'], 643 3464 => ['MMMLDXIV'], 644 3465 => ['MMMLDXV'], 645 3466 => ['MMMLDXVI'], 646 3467 => ['MMMLDXVII'], 647 3468 => ['MMMLDXVIII'], 648 3469 => ['MMMLDXIX'], 649 3470 => ['MMMLDXX'], 650 3471 => ['MMMLDXXI'], 651 3472 => ['MMMLDXXII'], 652 3473 => ['MMMLDXXIII'], 653 3474 => ['MMMLDXXIV'], 654 3475 => ['MMMLDXXV'], 655 3476 => ['MMMLDXXVI'], 656 3477 => ['MMMLDXXVII'], 657 3478 => ['MMMLDXXVIII'], 658 3479 => ['MMMLDXXIX'], 659 3480 => ['MMMLDXXX'], 660 3481 => ['MMMLDXXXI'], 661 3482 => ['MMMLDXXXII'], 662 3483 => ['MMMLDXXXIII'], 663 3484 => ['MMMLDXXXIV'], 664 3485 => ['MMMLDXXXV'], 665 3486 => ['MMMLDXXXVI'], 666 3487 => ['MMMLDXXXVII'], 667 3488 => ['MMMLDXXXVIII'], 668 3489 => ['MMMLDXXXIX'], 669 3490 => ['MMMLDXL', 'MMMXD'], 670 3491 => ['MMMLDXLI', 'MMMXDI'], 671 3492 => ['MMMLDXLII', 'MMMXDII'], 672 3493 => ['MMMLDXLIII', 'MMMXDIII'], 673 3494 => ['MMMLDXLIV', 'MMMXDIV'], 674 3495 => ['MMMLDVL', 'MMMXDV', 'MMMVD'], 675 3496 => ['MMMLDVLI', 'MMMXDVI', 'MMMVDI'], 676 3497 => ['MMMLDVLII', 'MMMXDVII', 'MMMVDII'], 677 3498 => ['MMMLDVLIII', 'MMMXDVIII', 'MMMVDIII'], 678 3499 => ['MMMLDVLIV', 'MMMXDIX', 'MMMVDIV', 'MMMID'], 679 3545 => ['MMMDVL'], 680 3546 => ['MMMDVLI'], 681 3547 => ['MMMDVLII'], 682 3548 => ['MMMDVLIII'], 683 3549 => ['MMMDVLIV', 'MMMDIL'], 684 3595 => ['MMMDVC'], 685 3596 => ['MMMDVCI'], 686 3597 => ['MMMDVCII'], 687 3598 => ['MMMDVCIII'], 688 3599 => ['MMMDVCIV', 'MMMDIC'], 689 3645 => ['MMMDCVL'], 690 3646 => ['MMMDCVLI'], 691 3647 => ['MMMDCVLII'], 692 3648 => ['MMMDCVLIII'], 693 3649 => ['MMMDCVLIV', 'MMMDCIL'], 694 3695 => ['MMMDCVC'], 695 3696 => ['MMMDCVCI'], 696 3697 => ['MMMDCVCII'], 697 3698 => ['MMMDCVCIII'], 698 3699 => ['MMMDCVCIV', 'MMMDCIC'], 699 3745 => ['MMMDCCVL'], 700 3746 => ['MMMDCCVLI'], 701 3747 => ['MMMDCCVLII'], 702 3748 => ['MMMDCCVLIII'], 703 3749 => ['MMMDCCVLIV', 'MMMDCCIL'], 704 3795 => ['MMMDCCVC'], 705 3796 => ['MMMDCCVCI'], 706 3797 => ['MMMDCCVCII'], 707 3798 => ['MMMDCCVCIII'], 708 3799 => ['MMMDCCVCIV', 'MMMDCCIC'], 709 3845 => ['MMMDCCCVL'], 710 3846 => ['MMMDCCCVLI'], 711 3847 => ['MMMDCCCVLII'], 712 3848 => ['MMMDCCCVLIII'], 713 3849 => ['MMMDCCCVLIV', 'MMMDCCCIL'], 714 3895 => ['MMMDCCCVC'], 715 3896 => ['MMMDCCCVCI'], 716 3897 => ['MMMDCCCVCII'], 717 3898 => ['MMMDCCCVCIII'], 718 3899 => ['MMMDCCCVCIV', 'MMMDCCCIC'], 719 3945 => ['MMMCMVL'], 720 3946 => ['MMMCMVLI'], 721 3947 => ['MMMCMVLII'], 722 3948 => ['MMMCMVLIII'], 723 3949 => ['MMMCMVLIV', 'MMMCMIL'], 724 3950 => ['MMMLM'], 725 3951 => ['MMMLMI'], 726 3952 => ['MMMLMII'], 727 3953 => ['MMMLMIII'], 728 3954 => ['MMMLMIV'], 729 3955 => ['MMMLMV'], 730 3956 => ['MMMLMVI'], 731 3957 => ['MMMLMVII'], 732 3958 => ['MMMLMVIII'], 733 3959 => ['MMMLMIX'], 734 3960 => ['MMMLMX'], 735 3961 => ['MMMLMXI'], 736 3962 => ['MMMLMXII'], 737 3963 => ['MMMLMXIII'], 738 3964 => ['MMMLMXIV'], 739 3965 => ['MMMLMXV'], 740 3966 => ['MMMLMXVI'], 741 3967 => ['MMMLMXVII'], 742 3968 => ['MMMLMXVIII'], 743 3969 => ['MMMLMXIX'], 744 3970 => ['MMMLMXX'], 745 3971 => ['MMMLMXXI'], 746 3972 => ['MMMLMXXII'], 747 3973 => ['MMMLMXXIII'], 748 3974 => ['MMMLMXXIV'], 749 3975 => ['MMMLMXXV'], 750 3976 => ['MMMLMXXVI'], 751 3977 => ['MMMLMXXVII'], 752 3978 => ['MMMLMXXVIII'], 753 3979 => ['MMMLMXXIX'], 754 3980 => ['MMMLMXXX'], 755 3981 => ['MMMLMXXXI'], 756 3982 => ['MMMLMXXXII'], 757 3983 => ['MMMLMXXXIII'], 758 3984 => ['MMMLMXXXIV'], 759 3985 => ['MMMLMXXXV'], 760 3986 => ['MMMLMXXXVI'], 761 3987 => ['MMMLMXXXVII'], 762 3988 => ['MMMLMXXXVIII'], 763 3989 => ['MMMLMXXXIX'], 764 3990 => ['MMMLMXL', 'MMMXM'], 765 3991 => ['MMMLMXLI', 'MMMXMI'], 766 3992 => ['MMMLMXLII', 'MMMXMII'], 767 3993 => ['MMMLMXLIII', 'MMMXMIII'], 768 3994 => ['MMMLMXLIV', 'MMMXMIV'], 769 3995 => ['MMMLMVL', 'MMMXMV', 'MMMVM'], 770 3996 => ['MMMLMVLI', 'MMMXMVI', 'MMMVMI'], 771 3997 => ['MMMLMVLII', 'MMMXMVII', 'MMMVMII'], 772 3998 => ['MMMLMVLIII', 'MMMXMVIII', 'MMMVMIII'], 773 3999 => ['MMMLMVLIV', 'MMMXMIX', 'MMMVMIV', 'MMMIM'], 774 ]; 775 776 private const THOUSANDS = ['', 'M', 'MM', 'MMM']; 777 private const HUNDREDS = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM']; 778 private const TENS = ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC']; 779 private const ONES = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']; 780 const MAX_ROMAN_VALUE = 3999; 781 const MAX_ROMAN_STYLE = 4; 782 783 private static function valueOk(int $aValue, int $style): string 784 { 785 $origValue = $aValue; 786 $m = \intdiv($aValue, 1000); 787 $aValue %= 1000; 788 $c = \intdiv($aValue, 100); 789 $aValue %= 100; 790 $t = \intdiv($aValue, 10); 791 $aValue %= 10; 792 $result = self::THOUSANDS[$m] . self::HUNDREDS[$c] . self::TENS[$t] . self::ONES[$aValue]; 793 if ($style > 0) { 794 if (array_key_exists($origValue, self::VALUES)) { 795 $arr = self::VALUES[$origValue]; 796 $idx = min($style, count($arr)) - 1; 797 $result = $arr[$idx]; 798 } 799 } 800 801 return $result; 802 } 803 804 private static function styleOk(int $aValue, int $style): string 805 { 806 return ($aValue < 0 || $aValue > self::MAX_ROMAN_VALUE) ? ExcelError::VALUE() : self::valueOk($aValue, $style); 807 } 808 809 public static function calculateRoman(int $aValue, int $style): string 810 { 811 return ($style < 0 || $style > self::MAX_ROMAN_STYLE) ? ExcelError::VALUE() : self::styleOk($aValue, $style); 812 } 813 814 /** 815 * ROMAN. 816 * 817 * Converts a number to Roman numeral 818 * 819 * @param mixed $aValue Number to convert 820 * Or can be an array of numbers 821 * @param mixed $style Number indicating one of five possible forms 822 * Or can be an array of styles 823 * 824 * @return array|string Roman numeral, or a string containing an error 825 * If an array of numbers is passed as an argument, then the returned result will also be an array 826 * with the same dimensions 827 */ 828 public static function evaluate($aValue, $style = 0) 829 { 830 if (is_array($aValue) || is_array($style)) { 831 return self::evaluateArrayArguments([self::class, __FUNCTION__], $aValue, $style); 832 } 833 834 try { 835 $aValue = Helpers::validateNumericNullBool($aValue); 836 if (is_bool($style)) { 837 $style = $style ? 0 : 4; 838 } 839 $style = Helpers::validateNumericNullSubstitution($style, null); 840 } catch (Exception $e) { 841 return $e->getMessage(); 842 } 843 844 return self::calculateRoman((int) $aValue, (int) $style); 845 } 846 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body