个性化阅读
专注于IT技术分析

如何在PHP中将整数转换为罗马数字

本文概述

尝试将数字转换为罗马表示时, 你需要考虑很多事情, 因此让我们考虑一下基础知识, 在大数字前面的小数字表示减法, 其他所有数字则意味着加法。例如, IV表示4, VI表示6。你不能在要减去的较大数字前面放置多个较小的数字。例如, IIV并不表示3, 因此你必须将一个, 数十个, 数百个和数千个作为单独的项目分开。这意味着99是XCIX, 即90 + 9, 但绝不应将其写为IC。同样, 999不能是IM, 而1999不能是MIM。可以很容易地理解在编程中遵循这种逻辑的方式(至少是从数字到罗马的方式), 但是从罗马数字到数值的方式更加困难, 因此在此不再赘述文章(不过我们将使用库进行处理)。

在本文中, 我们将向你展示如何将数字值转换为其罗马形式, 反之亦然(如果你使用的是库)。

A.使用一个函数

如果你无法使用库, 或者只是想保持简单, 则将以下函数添加到集合中。此函数将你的数字(第一个参数)转换为其罗马表示形式:

注意

大多数算法只能在1-4999的范围内工作, 因此使用较大的数字, 脚本将失败。

<?php

/**
 * Converts a number to its roman presentation.
 **/ 
function numberToRoman($num)  
{ 
    // Be sure to convert the given parameter into an integer
    $n = intval($num);
    $result = ''; 
 
    // Declare a lookup array that we will use to traverse the number: 
    $lookup = array(
        'M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400, 'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40, 'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1
    ); 
 
    foreach ($lookup as $roman => $value)  
    {
        // Look for number of matches
        $matches = intval($n / $value); 
 
        // Concatenate characters
        $result .= str_repeat($roman, $matches); 
 
        // Substract that from the number 
        $n = $n % $value; 
    } 

    return $result; 
} 

通过在你的项目中简单地包含此函数, 你将可以按以下方式使用它:

<?php

// VIII
echo numberToRoman(8);

// CXXIII
echo numberToRoman(123);

// MMCCCLV
echo numberToRoman(2355);

// MMMMCMXCIX
echo numberToRoman(4999);

而且我们不需要为此类函数包括一个库。

B.使用库

如果要使用库而不是编写自己的函数, 建议你使用Romans库, 这是一个非常简单的PHP Roman Numerals库, 可用于将整数转换为其罗马表示形式, 反之亦然。安装库的首选方法是使用composer, 因此你可以运行以下命令

composer require wandersonwhcr/romans

安装库之后, 你将能够使用其名称空间并使用可帮助你转换数字的函数。有关此库的更多信息, 请访问Github上的官方存储库。

该库包含几个简单的过滤器, 用于将具有罗马数字的字符串转换为将输入表示为十进制的int, 并将十进制int转换为具有罗马数字的字符串作为结果。

罗马数字

要将整数转换为罗马表示形式, 请使用IntToRoman类, 创建一个实例并从中调用filter方法。此方法将数字作为第一个参数, 并返回包含罗马数字的字符串:

use Romans\Filter\IntToRoman;

$filter = new IntToRoman();
$result = $filter->filter(1999);

// MCMXCIX
echo $result;

罗马数字

要将罗马数字转换为其数字表示形式, 请使用RomanToInt类, 创建一个实例并从中调用filter方法。此方法将带有罗马数字的字符串作为第一个参数, 并返回带有数字值的整数:

use Romans\Filter\RomanToInt;

$filter = new RomanToInt();
$result = $filter->filter('MCMXCIX');

// 1999
echo $result;

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在PHP中将整数转换为罗马数字

评论 抢沙发

评论前必须登录!