为了账号安全,请及时绑定邮箱和手机立即绑定

实施数千(1k = 1000,1kk = 1000000)解释器

实施数千(1k = 1000,1kk = 1000000)解释器

PHP
素胚勾勒不出你 2023-03-26 16:01:21
问题我正在尝试创建一个将数字作为输入的工具,例如 - 1kk,并用k乘以 1000 替换每个数字,即在这里我们得到1000000。处理整数时没有问题,但我正在努力实现将数字替换为浮点数的算法,例如12.345kkwith 12345000。可能的解决方案k好的,我可以用乘以 1000 的方法替换每个表达式,然后eval是整个表达式:$inp= "12.345kk";$number = preg_replace('/[kt]/','*1000',$inp);eval("\$result = {$number};");echo($result); // 12345000但这真的很危险,因为该工具需要用户输入,并且用户可以编写他们想要的任何内容。你能为这个问题提供一个安全的解决方案吗?这是一个 PHP 问题,但我想解决方案在其他语言中应该或多或少相似,算法本身应该不是很困难。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

您可以使用preg_match将输入拆分为数字和乘数,并将数字乘以1000乘数字符串的长度:

$inp= "12.345kk";

$number = 0;

if (preg_match('/^([\d.]+)([kt]+)/', $inp, $matches)) {

    $number = $matches[1];

    $multipliers = $matches[2];

    $number *= 1000 ** strlen($multipliers);

}

echo $number;

输出:


12345000


查看完整回答
反对 回复 2023-03-26
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

如果您确定数字的格式,您可以计算k字符串中的字符数,然后将其转换为数字并乘以适当的幂。


$inp= "12.345kk";


$count = substr_count($inp,'k');


$number = (double)$inp*1000**$count;


print($number);


查看完整回答
反对 回复 2023-03-26
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您的担心是有道理的,eval()除非您绝对必须这样做,否则您永远不应该通过 运行用户输入。你不必在这里这样做。让我向您展示一种可能的解决方案。

您可以通过将输入转换为 来float获取输入的数字部分。k您可以使用获取字符数substr_count()。然后,您可以使用ks 的数量作为该数字的指数1000并将其与输入数字相乘来计算结果数字:

$inp = "12.345kk";


$number = (float) $inp;                        // 12.345

$factor = pow(1000, substr_count($inp, 'k'));  // 1000^2


$result = $number * $factor;                   // 12345000

请注意,您也可以使用**运算符而不是pow. 但是,我认为pow不熟悉 PHP 的程序员很容易理解它,因此更可取。



查看完整回答
反对 回复 2023-03-26
  • 3 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信