Как преобразовать строку в плавающий с "хвостом"? - PullRequest
2 голосов
/ 30 мая 2011


У меня проблема с преобразованием строки в число с плавающей точкой.

print gettype($value[$id]); //returns string

var_dump($value[$id]);//returns string '34,7140' (length=7)

$float = floatval($value[$id]); 

print gettype($float);//returns double

var_dump($float);//returns float 34

echo $float;//returns 34

Я не понимаю, почему "34"? Почему $ float не '34, 7140 '?
Как я могу получить $ float = 34,7140?

Ответы [ 3 ]

5 голосов
/ 30 мая 2011

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

$float = (float)str_replace(',', '.', $value);
1 голос
/ 30 мая 2011

Десятичный разделитель в PHP (и большинстве других компьютерных языков) - это точка, а не запятая:

Обновление: floatval () прекращает синтаксический анализ строки, как только находит не числовой символ.Вот пример из руководства:

<?php
$var = '122.34343The';
$float_value_of_var = floatval($var);
echo $float_value_of_var; // 122.34343
?>

Если вам нужно извлечь число, которое не в английском формате, вы должны написать свой собственный код.Вот предложение:

function to_decimal($string, $decimal_separator=',', $thousand_separator='.'){
    $value = strtr($string, array(
        $decimal_separator => '.',
        $thousand_separator => '',
    ));
    if( !is_numeric($value) ){
        return NAN;
    }
    return floatval($value);
}
0 голосов
/ 30 мая 2011

Поскольку «34,7140» является строкой, поскольку она содержит запятую.

Вы можете использовать $float = floatval(str_replace(',', '', $value[$id])); для удаления символа запятой или $float = floatval(str_replace(',', '.', $value[$id])); для замены запятой на десятичную точкуследовательно, заставляя PHP интерпретировать число как 34.7140.

...