将字符串中的浮点数乘以变量后替换该浮点数


Replace the floating point number in a string after multiplying it by a variable

我想在字符串乘以变量后替换字符串中的数字。我有以下 PHP:

$desc = "+2.23% critical damage";
$count = 3;`

现在我想在新字符串中使用 $count * $desc 的值,如下所示:

$sum = "+6.69% critical damage";

我该如何管理?如何将此字符串中的数字乘以$count

三种可能性。

丑陋如地狱,但工作(在字符串上使用floatval()):

<?php
$desc = "+2.23% critical damage";
$count = 3;
$sum = floatval($desc) * $count . "% critical damage";
echo $sum;
# 6.69% critical damage
?>

第二:正则表达式方法。

<?php
# define a regex to allow digits and points directly connected
$regex = '~['d.]+~';
preg_match($regex, $desc, $num);
$sum = floatval($num[0]) * $count . "% critical damage";
echo $sum;
# 6.69% critical damage
?>

第三种可能性(可能是最好的):尝试细化您的实际需求并编辑您的问题:)

如果字符串的其余部分是动态的,使用 preg_replace_callback() 替换浮点数可能更健壮——这样你只会接触字符串中的数字。

sprintf()对于标准化产品的格式非常方便。

代码:(演示)

$desc = "+2.23% critical damage";
$count = 3;
var_export(
    preg_replace_callback(
        '~^[+-]'d+(?:'.'d+)?~',
        function($m) use ($count) {
            return sprintf('%+.2f', $m[0] * $count);
        },
        $desc,
        1
    )
);

输出:

'+6.69% critical damage'