将字符串转换为数字,尊重点和逗号以进行排序

时间:2017-11-14 17:08:35

标签: string type-conversion numbers

我需要根据用户的价格订购一些用户注册的产品。

我使用WordPress,当用户宣传产品时,我通过input = text获取字段,然后使用函数进行转换。

不幸的是,收到转换后的号码的字段也是一个文本字段,我无法改变它。

因此,当我循环播放帖子并获取其内容时,我使用相同的函数来转换数字。

就视觉而言,它完美地运作......但是当我尝试按价格订购时...它搞砸了。

以下是我的功能:

//convert the number wich is a string, to float
function tofloat($num) {
    $dotPos = strrpos($num, '.');
    $commaPos = strrpos($num, ',');
    $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos : 
        ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false);
    if (!$sep) {
        return floatval(preg_replace("/[^0-9]/", "", $num));
    } 

    return floatval(
        preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . ',' .
        preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num)))
    );
}
$value = get_field('preco_anuncio');
$precoFinal = tofloat($value);

任何想法如何解决?我需要保留视觉效果。用点和逗号。赞:3.567,00€

1 个答案:

答案 0 :(得分:0)

好的,所以我让它上班了。不知道这是正确的方式还是最好的方式......但它解决了我的问题,我没有看到任何问题。

以下是我的所作所为:

  1. 我所拥有的userSecret是一个文字输入。

  2. 我使用JavaScript在视觉上使其看起来更像货币字段。

  3. 注册数据库时,我将其转换为我发布的函数input

    toFloat
  4. 然后我使用function tofloat($num) { $dotPos = strrpos($num, '.'); $commaPos = strrpos($num, ','); $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos : ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false); if (!$sep) { return floatval(preg_replace("/[^0-9]/", "", $num)); } return floatval( preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . ',' . preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num))) ); } 删除任何点或空格:

    number_format($ precoAd,2,',','');

  5. 当我从数据库中获取值时,我再次将其传递给number_format(),以便它看起来像我需要的那样:

    number_format($ value,2,',','。');