1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php怎么把数字转换成字母b 如何在PHP中将整数转换为罗马数字

php怎么把数字转换成字母b 如何在PHP中将整数转换为罗马数字

时间:2020-05-01 08:56:23

相关推荐

php怎么把数字转换成字母b 如何在PHP中将整数转换为罗马数字

本文概述

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

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

A.使用一个函数

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

注意

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

/**

* 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;

}

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

// 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;

编码愉快!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。