2011-09-06 16 views
1

У меня есть номер, хранящийся в mysql как тип float. Из того, что я прочитал, я должен был бы преобразовать float вниз, используя floor(), но попытка этого или чего-либо еще не работает. Надеюсь, кто-то может понять, что я делаю неправильно?Как преобразовать float в целое число?

Пример ..

База данных показывает цену как $ 25,00 - В моей странице PHP, у меня есть следующий код (после преобразования цен строку $ цена):

$price2 = floor($price); 
echo $price; 
echo '<br>'; 
echo $price2; 

Мои результаты печати :

$25.00 
0 

Я также попытался заменить «пол» на «круглый». Тот же результат.

+2

Что вы ожидали? Вы настигаете '' $ ''. –

ответ

6

Это потому, что вы используете $25.00 в качестве входных данных и $ делает PHP думать, что вы пытаетесь округлить строку - PHP будет округлить (нечисловую) строку 0.

  • floor = округлить вниз.
  • ceil = округление вверх.
  • round = тот же самый процесс, который они учат вас в гимназии

Но ни один из них не будет работать, если у вас есть в строке с $. Я предлагаю вам сделать что-то вроде '$' . round(str_replace('$', '', $price) * 100)/100. (Умножение и деление делают его таким, что округляются до ближайшего копейки (вместо доллара), str_replace делает это так, что он имеет дело с числовым значением, а затем добавляет $. Если вы действительно любите, то ниже)

$dollar = '$' . round(str_replace('$', '', $price) * 100)/100; 
// the following makes sure that there are two places to the right of the decimal 
$pieces = explode('.', $dollar); 
if(isset($pieces[1]) && strlen($pieces[1]) == 1) 
{ 
    $pieces[1].='0'; 
    $dollar = implode('.', $pieces); 
} 
// if you like, you can also make it so that if !pieces[1] add the pennies in 
+0

Ударьте меня на несколько секунд. – canadiancreed

+2

Эх, было бы правильнее сказать, что при принуждении строки к числу ведущий '$' приведет к возврату преобразования 0. Округление строки будет работать нормально, если строка может быть преобразована в номер. – cdhowie

+0

Спасибо! Извините за глупую ошибку. Отличное объяснение! Я должен был заявить, что db показывает значение как 25.00 (не $ 25.00), поэтому я не понял добавление знака $ в код выше этого – Andi

0

Как говорит cwallenpoole, вы не можете округлять нечисловое значение. Однако вы можете сделать это числовым, например,

$price = '$25.25'; 
echo sprintf('$%0.2f', floor(preg_replace('/[^\d\.]/', null, $price))); 
Смежные вопросы