PHP XML - возвращение неверного значения

/(.*)<FooBar>/s

s вызывает Dot (.) для соответствия возврату каретки

0
задан Matěj Husák 3 March 2019 в 10:26
поделиться

1 ответ

Давайте посмотрим на это

У меня есть число с плавающей запятой 32 000, 00, и оно анализирует

Нет, у вас есть строка "32 000, 00". Поэтому, если мы посмотрим, как PHP выполняет жонглирование типов

http://php.net/manual/en/language.types.type-juggling.php

Мы см. несколько примеров, подобных этому:

$foo = 5 * "10 Little Piggies"; // $foo is integer (50)

Таким образом, значение этих 2 умножается на 50 или 5*10, а десять разбирается из "10 Little Piggies". PHP будет применять те же правила к тому, что у вас есть выше, что приводит к 32. Потому что это строка с этими spaces PHP сделает это почти так же, как и выше.

Вы можете легко проверить это:

echo floatval('32 000, 00');

Вывод

32 

Песочница

Возможно, вам придется вручную преобразовать это в то, что так должно быть. Легко сделать, просто убрав пробелы:

  echo floatval(str_replace([' ',','], ['','.'], '32 000, 00'));
  #output 32000
  echo floatval(str_replace([' ',','], ['','.'], '32 290,01'));
  #output 32290.01

Если я правильно помню, некоторые страны используют , в качестве . для десятичного разделителя. Но мне пришлось заменить , на ., чтобы заставить их работать ... Могут быть некоторые крайние случаи, когда это не сработает, но без большей выборки данных я не могу сказать наверняка. [ 1126] 1127 Где и почему эти пространства там, я понятия не имею. Было бы лучше полностью удалить их из XML, но это может оказаться невозможным.

Без определенного кода в вопросе это лучшее, что я могу сделать.

Ура!

0
ответ дан ArtisticPhoenix 3 March 2019 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: