Меню Закрыть

Php str to float

Содержание

У меня есть список строк (размер в байтах), я читаю их из файла. Скажем, одна из строк – 2968789218, но когда я конвертирую ее в float, она становится 2.00.

решаемая

На самом деле проблема заключалась в кодировании. Теперь отлично, когда я меняю кодировку файла: D

Удивительно, но ответа нет. Проблема существует только в 32-битном PHP.

Если строка не содержит символов «.», «E» или «E», а числовое значение вписывается в ограничения типа целочисленного типа (как определено PHP_INT_MAX), строка будет оцениваться как целое число. Во всех остальных случаях он будет оцениваться как плавающий.

Другими словами, $string сначала интерпретируется как INT, которая вызывает переполнение (значение $string 2968789218 превышает максимальное значение ( PHP_INT_MAX ) 32-битного PHP, которое равно 2147483647. ), А затем вычисляется как float by (float) или floatval() .

Таким образом, решение:

Чтобы проверить, является ли ваш PHP 32-разрядным или 64-битным, вы можете:

Если ваш PHP 64-бит, он распечатает 9223372036854775807 , иначе он распечатает 2147483647 .

$ float = floatval ($ string);

Если функция floatval не работает, вы можете попробовать сделать следующее:

I am not familiar with PHP at all and had a quick question.

I have 2 variables pricePerUnit and InvoicedUnits . Here’s the code that is setting these to values:

If I output this, I get the correct values. Lets say 5000 invoiced units and 1.00 for price.

Now, I need to show the total amount spent. When I multiply these two together it doesn’t work (as expected, these are strings).

But I have no clue how to parse/cast/convert variables in PHP.

What should I do?

7 Answers 7

Should do it for you. Check out Type-Juggling. You should also read String conversion to Numbers.

float floatval ( mixed $var ) — Gets the float value of a string.

Well, if user write 1,00,000 then floatvar will show error. So —

Читайте также:  Как отклеить пломбу наклейку

This is much more reliable.

Dealing with markup in floats is a non trivial task. In the English/American notation you format one thousand plus 46*10-2 :

But in Germany you would change comma and point:

This makes it really hard guessing the right number in multi-language applications.
I strongly suggest using Zend_Measure of the Zend Framework for this task. This component will parse the string to a float by the users language.

Use this function to cast a float value from any kind of text style:

This solution is not dependant on any locale settings. Thus for user input users can type float values in any way they like. This is really helpful e.g. when you have a project wich is in english only but people all over the world are using it and might not have in mind that the project wants a dot instead of a comma for float values. You could throw javascript in the mix and fetch the browsers default settings but still many people set these values to english but still typing 1,25 instead of 1.25 (especially but not limited to the translation industry, research and IT)

I was running in to a problem with the standard way to do this:

If there isn’t a valid number, the parser shouldn’t return a number, it should throw an error. (This is a condition I’m trying to catch in my code, YMMV)

To fix this I have done the following:

Then before further processing the conversion, I can check and return an error if there wasn’t a valid parse of the string.

Приведение типа — это преобразование значения одного типа в значение другого типа.

Читайте также:  Как показать что векторы образуют базис

Есть два вида приведения типов:

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

Чтобы выполнить явное приведение, нужно указать в круглых скобках имя требуемого типа непосредственно перед приводимым значением или переменной:

Запись имени типа в круглых скобках называется оператором приведения типа. Допускаются следующие операторы приведения типов:

  • (int), (integer) — приведение к integer .
  • (bool), (boolean) — приведение к boolean .
  • (float), (double), (real) — приведение к float .
  • (string) — приведение к string .
  • (array) — приведение к array .
  • (object) — приведение к object .
  • (unset) — приведение к NULL .

Приведение к целому числу

При приведении bool в integer , FALSE преобразуется в 0 (нуль), а TRUE — в 1 (единицу). При приведении float в integer , дробная часть будет округлена в сторону нуля. Значение NULL преобразуется в 0:

Строки преобразуются по следующим правилам:

  • Если первый символ строки является цифрой, знаком + или — , то интерпретатор переходит к анализу второго символа, если второй символ строки является цифрой, то интерпретатор переходит к анализу третьего символа и так до тех пор, пока не будет обнаружен символ отличный от цифры, после этого интерпретатор возвращает полученное целое число.
  • Если строка пустая или первый символ строки не является цифрой, знаком + или — , она преобразуется в 0.

Для других типов поведение преобразования в integer не определено. Поэтому не нужно полагаться на любое наблюдаемое поведение, так как оно может измениться без предупреждения.

Приведение к числу с плавающей точкой

Строки преобразуются по следующим правилам:

  • Если первый символ строки является цифрой, точкой, знаком + или — , то интерпретатор переходит к анализу второго символа, если второй символ строки является цифрой, точкой (если перед этим была цифра), буквой e или E (если перед этим была цифра или точка), то интерпретатор переходит к анализу третьего символа и так до тех пор, пока не будет обнаружен символ, который не может быть преобразован в числовое значение, после этого интерпретатор возвращает полученное число с плавающей точкой.
  • Если строка пустая или первый символ строки не является цифрой, точкой, знаком + или — , она преобразуется в 0.
Читайте также:  Предметный указатель в ворде как делать

Значения других типов сначала преобразуются в integer , а затем уже из integer происходит преобразование в тип float .

Приведение к булеву типу

Следующие значения в результате преобразования дают значение FALSE :

  • само значение FALSE
  • 0 и 0.0 (нуль)
  • пустая строка, и строка "0"
  • массив без элементов
  • NULL
  • Объекты SimpleXML , созданные из пустых тегов

Все остальные значения при преобразовании дают в результате значение TRUE . Значение FALSE и шесть значений, которые при преобразовании приводятся к этому значению, обычно называют ложными значениями, а все остальные — истинными:

В любом контексте, когда интерпретатор PHP ожидает получить булево значение, ложные значения интерпретируются как FALSE , а истинные значения — как TRUE .

Приведение к строке

Булево значение TRUE преобразуется в строку "1", а значение FALSE преобразуется в "" (пустую строку):

Целое число или число с плавающей точкой преобразуется в строку, состоящую из цифр числа:

Массивы всегда преобразуются в строку "Array" :

NULL всегда преобразуется в пустую строку:

Resource всегда преобразуется в строку вида "Resource id #1" .

Для преобразования объекта в строку, объект должен иметь метод __toString() :

Если объект не имеет метод __toString() , то в результате преобразования будет вызвана фатальная ошибка:

Приведение к NULL

Приведение к типу NULL не удаляет переменную и её значение, а лишь возвращает значение типа NULL :

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.