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

本文概述

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

编码愉快!

    推荐阅读