PHP XML - возвращение неверного значения - PullRequest
0 голосов
/ 03 марта 2019

В настоящее время я работаю над одним проектом электронной коммерции.У меня есть XML, полный продуктов, которые мне нужно реализовать в интернет-магазине.

Проблема в том, что мой синтаксический анализатор XML возвращает неверные значения, например: у меня есть число с плавающей запятой 32 000, 00, и он анализирует только 32 для моей переменной php.Число, которое я анализирую, как-то делится на тысячу, и я не знаю почему.Точно такой же код только с XML-файлом, который имеет 32 000 работает нормально.Это какие-либо настройки конвертации, которые мне нужно установить при инициализации объекта SimpleXML?

Спасибо за помощь.

1 Ответ

0 голосов
/ 03 марта 2019

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

У меня есть число с плавающей запятой 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');

Output

32 

Песочница

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

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

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

Где или почему там эти пространства, я понятия не имею.Было бы лучше полностью удалить их из XML, но это может оказаться невозможным.

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

Приветствия!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...