Как конвертировать число с плавающей точкой в ​​целое число? - PullRequest
1 голос
/ 06 сентября 2011

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

Пример ..

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

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

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

$25.00
0

Я также попытался заменить слово floor на round. Тот же результат.

Ответы [ 2 ]

6 голосов
/ 06 сентября 2011

Это потому, что вы используете $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 голосов
/ 06 сентября 2011

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

$price = '$25.25';
echo sprintf('$%0.2f', floor(preg_replace('/[^\d\.]/', null, $price)));
...