2017-02-13 11 views
2

Я прочитал некоторые данные из файла csv. Каждая строка в файле имеет значение float. эти значения могут быть:Исправить значения поплавка

  • .123: начиная с периода, так что мне нужно добавить ноль раньше.
  • 1,23: наличие разделительной запятой ',' вместо периода, поэтому мне нужно изменить это.
  • 1.2e3, имеющий экспоненциальный формат, поэтому мне нужно преобразовать его в десятичный формат.

Я не могу использовать функцию number_format, потому что я не могу установить количество знаков после запятой (числа с плавающей точкой не имеют фиксированную длину дробной части, и мы хотим, чтобы принять их, как они не потерять данные).

Вот что я пробовал до сих пор; Я построил две функции, первый фильтр поплавки, второй корректирует их, когда фильтр возвращает ложь:

function validateFloat($float){ 
    if(!filter_var($float,FILTER_VALIDATE_FLOAT,array('flags' => FILTER_FLAG_ALLOW_FRACTION))){ 
    return false; 
    } 

} 

function correctFloat($float){ 
    if (validateFloat($float)==false){ 
    $number = number_format($float,null,'.'); 
    str_replace($number,'',$line); 
    } 
} 

Я не знаю, как построить функцию correctFloat. Какие-либо предложения ? Ценить это.

ответ

2

Ваша функция может проверить, есть ли запятая и получить правильный deliminator затем использовать floarval на любом другом случае

function change_format($value){ 
    if(is_string($value)){ 
     //has to be a string if using ',' 
     $value= str_replace(",",".",$value); 
    } 
    return floatval($value); 
} 

echo change_format(.123) ."<br>"; 
echo change_format("1,23") ."<br>"; 
echo change_format("1.2e3"); 

Выходы:

0.123 
1.23 
1200 
+0

круто, что, если он начинается с «» ? – Somar

+0

floatval колодки это. Используйте обновление, которое я просто сделал с ошибкой '$ value' много ... – nerdlyist

+0

Это просто! Спасибо. – Somar

 Смежные вопросы

  • Нет связанных вопросов^_^