php 为什么把字符串转换成数字创建错误的数字[关闭]

fykwrbwg  于 2023-04-04  发布在  PHP
关注(0)|答案(1)|浏览(154)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

2小时前关门了。
Improve this question
在我的表中,我有一个价格可以是字符串或数字,但我试图将字符串转换为数字,但它确实工作。
在原点,数字与表中的数字相同(一行是名称,另一行是价格)

Apple iPhone 13 128 Go Minuit   |  1 379€00
Apple iPhone 14 128 Go Minuit   |  1 379€00
Apple iPhone 14 128 Go Lumière Stellaire    |  919€00
Apple iPhone 14 Pro 128 Go Noir Sidéral |  919€00

重构后,我有了这个,你可以看到它是一个数字(num)还是一个字符串

Apple iPhone 13 128 Go Minuit   |  1 379.00
Apple iPhone 14 128 Go Minuit   |  1 379.00
Apple iPhone 14 128 Go Lumière Stellaire    |  919.00 num
Apple iPhone 14 Pro 128 Go Noir Sidéral   |  919.00 num

如果我试着应用它:
我也尝试了floatval,但不工作

if (is_string($price_format)) {
  $price_format = number_format((float)$price_format, 2, '.', '');
}

结果是:

Apple iPhone 13 128 Go Minuit   |  1.00 num
Apple iPhone 14 128 Go Minuit   |  1.00 num
Apple iPhone 14 128 Go Lumière Stellaire |  919.00 num

正如你所看到的,我有1.00,而不是价格,但一切都是数字
我需要结果是类似1379.00的价格数字,而不是字符串
下面我的方法

foreach ($result as $item) {
  $price = $item['1'];

  $convert_array = ['$', '€', '£', '¥', '₩', '₹', '₽', '฿', '₺', '₴'];

  foreach ($convert_array as $symbol) {
    if (strpos($price, $symbol) !== false) {
      $price = str_replace($symbol, '.', $price);
      $price = preg_replace('/\. /', '', $price, 1);
      $price = str_replace(',', '.', $price);
      break;
    }
  }

  $price_format = trim($price);

  if (substr($price_format, -1) == '.') {
    $price_format = substr($price_format, 0, -1);
  }

/*
  if (is_string($price_format)) {
    $price_format = number_format((float)$price_format, 2, '.', '');
  }
*/
  if (is_numeric($price_format)) {
    $price_format = $price_format . ' num';
  }
  print_r($price_format);
}
py49o6xq

py49o6xq1#

如果输入数字的千位分隔符是空格,你可以尝试先删除空格(空格之后的任何内容都会被float转换忽略),然后使用' '作为number_format()的最后一个参数再次添加它:

if (is_string($price_format)) {
    $price_format = number_format((float)str_replace(' ','',$price_format), 2, '.', ' ');
  }

在这里的例子(https://3v4l.org/OCSWN)中,结果是:

相关问题