2016-03-04 3 views
1

меня следующая проблема: я получил значение, какPHP: Расчет с центами

2,50 
1 
2,99 

Теперь я хотел бы разделить их на 2 часть, как это:

2 and 50 
1 and 00 
2 and 99 


$euro  = explode('.', $item->price)[0]; 

if(array_key_exists(1, explode('.', $item->price))) { 
    $cent = explode('.', $item->price)[1]; 
} 
else 
{ 
    $cent = "00"; 
} 

Это не способ, которым я должен это сделать ;-)

Есть еще одна проблема: теперь я получаю следующие значения:

2 and 5 
1 and 00 
2 and 99 

Но это должно быть

2 and 50 
1 and 00 
2 and 99 
+0

Почему вы хотите это сделать? для получения 50, а не 5, вам нужно использовать strval(), чтобы он был отличен как строка, будет ли функция number_format() работать для вас? или money_format()? –

+0

, чтобы добавить, что 0, чтобы сделать 50, вы можете использовать 'str_pad ($ cent, 2,0)' – Neat

+0

Мне нужно это сделать, потому что webdesigner добавляет специальный класс к значениям cent ;-) – MyFault

ответ

1

Вы можете сделать это, прилично короткий способ сделать это:

$x = '2.55'; 

$a = explode('.',$x); 

$euro = $a[0]; 
$cent = count($a) >= 2 ? $a[1] : '00'; 

Выход:

2 and 55 

Помните, что в этой строке у вас не может быть двух точек.

0

Попробуйте это:

<?php 
$value = 2.50; 
$big = ($value%10); 
$small = ($value-$big)*100; 
echo "Value: ".$value."\n"; 
echo "Big: ".$big."\n"; 
echo "Small: ".$small."\n"; 
0

Если поплавки (или строки с точкой в ​​качестве десятичного разделителя) в качестве входных данных:

$euro = (string)floor($input); 
$cent = str_pad(($input - $euro) * 100, 2, "0", STR_PAD_LEFT); 

В этом случае вы получите строки с запятой в качестве разделителя, препенда:

$input = str_replace(",", ".", $input);