2013-11-11 1 views
1

Это выход я вижу из моего PHP скрипт:PHP вычисляет простое добавление неправильно ...?

Cash Completions (Purchase) 
Product A: £435.60 
Product B: £38.40 
Product C: £0.00 
Product D: £3,349.87 
Product E: £559.38 
Product F: £0.00 
Product G: £0.00 
Product H: £0.00 
TOTAL COSTS: £1,036.38 

Взгляните на последнюю строку, «СУММА РАСХОДОВ». Вы увидите, что это не соответствует сумме всех строк выше.

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

Cash Completions (Purchase) 
Product A: <?php echo '£'.$extra->a;?> 
Product B: <?php echo '£'.$extra->b;?> 
Product C: <?php echo '£'.$extra->c;?> 
Product D: <?php echo '£'.$extra->d;?> 
Product E: <?php echo '£'.$extra->e;?> 
Product F: <?php echo '£'.$extra->f;?> 
Product G: <?php echo '£'.$extra->g;?> 
Product H: <?php echo '£'.$extra->h;?> 
TOTAL COSTS: <?php echo '£'.number_format($extra->a + $extra->b + $extra->c + $extra->d + $extra->e + $extra->f + $extra->g + $extra->h, 2);?> 

Переменная $extra является объектом, представляющим MySQL Resultset. Как вы можете видеть, вывод отдельных продуктов правильный, но по какой-то причине общее количество миль.

Любые идеи?

Спасибо!

+5

Это не округляя вопрос, его ВЫКЛЮЧЕНО тысяч –

+2

I «Предположим, это проблема локализма - тысячи - разделитель – Hulk

+0

@Hanky ​​웃 Panky - pah. Это то, что я получаю для комментариев, прежде чем кофеин сможет ударить. – andrewsi

ответ

5

3,349.87 цена продукта D не является допустимым номером PHP, это причина, по которой ваше сложение не удается. Нормализуйте свои цены в базе данных, используйте поля float.

+1

Вы должны использовать поля 'DECIMAL' вместо полей' FLOAT'. Более подробное объяснение - это [здесь] (http://stackoverflow.com/questions/61872/use-float-or-decimal-for-accounting-application-dollar-amount) – Andy

2

Проблема с номером:

3,349.87 

Это должно быть вместо этого:

3349.87 

Число 3,349.87 не правильный номер для PHP. PHP распознавать и переводить точку, а не запятую («„)

Вы могли бы просто сделать (“.»):

$total = (float)str_replace(",","",$extra->a) + (float)str_replace(",","",$extra->b) + ... 

TOTAL COSTS: <?php echo '£'.number_format($total, 2); ?> 
+2

lol Я исправил вашу синтаксическую опечатку, и вы вернули ее. Удачи :) –

+0

hahaha, извините, человек вы правы. Я не сделал это нарочно :) –

+1

Приветствия, не проблема. Вы исправили это, вот что важно. –