php - 要 float 的价格字符串

标签 php

我喜欢将带有价格的字符串转换为浮点值。价格来自不同的语言和国家,可能如下所示:

 1,00 €
 € 1.00
 1'000,00 EUR
 1 000.00$
 1,000.00$
 1.000,00 EURO

或者任何你能想到的...

不确定我的示例是否包含所有可能性。我也不确定是否可以盲目地进行国际转换,也许我必须使用语言代码?所以一开始欧元和美元就足够了。

floatval() 有点蠢所以我需要更多的东西。我想我应该首先删除数字、. 旁边的所有字符。然后修复 ,/. 并最终使用 floatval。

有没有人以前做过这个,可以帮我一点忙吗?

我更喜欢没有正则表达式的解决方案;)

最佳答案

好的,我自己试过了。你怎么看这个?

function priceToFloat($s){
    // is negative number
    $neg = strpos((string)$s, '-') !== false;
    
    // convert "," to "."
    $s = str_replace(',', '.', $s);

    // remove everything except numbers and dot "."
    $s = preg_replace("/[^0-9\.]/", "", $s);

    // remove all seperators from first part and keep the end
    $s = str_replace('.', '',substr($s, 0, -3)) . substr($s, -3);

    // Set negative number
    if( $neg ) {
        $s = '-' . $s;
    }

    // return float
    return (float) $s;
}

这里有一些测试:http://codepad.org/YtiHqsgz

对不起。我无法包含其他功能,因为键盘不喜欢它们。但我比较了它们,发现像“22 000,76”或“22.000”这样的字符串有问题

更新:作为Limitless isa指出您可能会查看内置函数 money-format .

关于php - 要 float 的价格字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110525/

相关文章:

php - 似乎无法让 PHP 在 MAMP 中工作

javascript - 使用 JSON 将包含 SQL 查询结果的数组返回到网页

php - 我可以 "use"来自 PHP 交互式 Shell 中必需/包含文件的命名空间吗?

PHP session 变量在不应该存在的时候存在,在应该存在的时候不存在

javascript - 此服务器上禁止 : You don't have permission to access/questions. php

php - 创建只有我的站点可以读取的图像文件格式

php - 单击单选按钮后的操作

php - ZF + 学说 2 : Heavy model classes or Lightweight model + Service layer?

php - 为什么我会收到 SQL 语法错误?

php - 从 codeigniter Controller 中的数组中删除一个索引