2014-08-29 141 views
1

所以我不能弄清楚这里有什么问题。我正试图将销售税计算为总计。我想在这里得到两个变量:PHP销售税计算

A. The total amount of sales tax that is being charged (i.e. $0.61 for sales tax) 
B. The Grand total including the item price times the quantity plus the sales tax. 

我的脚本如下,顺便我也该设置现在它只会增加一分钱给分总。 (7.00 $总额反而是$ 7.01)

如果每个项目后,子总数为$7.00,税率为8.650%那么税收总应该是$0.61和总计应$7.61但它使它$7.01代替。

public function invoice_totals($invoice_id) 
{ 
    $query = $this->CI->db->select('*'); 
    $query = $this->CI->db->from('invoice_to_items'); 
    $query = $this->CI->db->where('invoice_id', $invoice_id); 
    $query = $this->CI->db->join('items', 'items.item_id = invoice_to_items.item_id'); 
    $query = $this->CI->db->get(); 
    $items = $query->result(); 

    $sub_total  = '0.00'; 
    $grand_total = '0.00'; 
    $tax_rate  = '0.0865'; 
    $tax_total  = '0.00'; 

    foreach($items as $item) 
    { 
     $sub_total = $sub_total + ($item->item_price*$item->item_qty); 

     $tax_total = $tax_total + ($sub_total * $tax_rate)/100; 
    } 

    $grand_total = $grand_total + $sub_total + $tax_total; 

    return array(
     'sub_total'  => number_format($sub_total,2), 
     'tax_total'  => number_format($tax_total, 2), 
     'grand_total' => number_format($grand_total,2), 
    ); 
} 

我这个问题,我关心的主线是:

$tax_total = $tax_total + ($sub_total * $tax_rate)/100; 
+4

100卸下师,你的$ TAX_RATE已经是十进制形式。另外,用数字而不是字符串初始化你的变量。 – 2014-08-29 20:32:58

+1

那么你应该可能不应该实现的东西,可能大概甚至会有法律影响,如果做错了... – CBroe 2014-08-29 20:40:08

+0

@ user3968645我很抱歉告诉你这个,但编程和数学齐头并进。如果你不能进行基本的数学运算,那么作为一名程序员你的未来就会显得暗淡无光。 – 2014-08-29 20:41:34

回答

3

你申请你的税,以您的小计在循环的每次迭代。

假设有3项:$ 5,$ 15 $ 40

loop #1: 

subtotal = 0 + ($5 * 1) = $5 
total = 0 + ($5 + 8.65%) = $5.43 

loop #2: $5.43 + ($15 * 1) = $20.43 
total = $5.43 + ($20.43 + 8.65%) = etc... 

etc... 

你的#2项现已双重征税的第一个项目,你的第三个项目将TRIPLE征税的第一项和双重征税的第二项等...

同样,您的税率值是ALREADY小数(0.0865),但您正在做一个/ 100除法,就像您有$tax_rate = 8.65一样。所以,有效的税率实在是0.0865%

你的循环应该是:

$taxrate = 8.65; // % value 

foreach($items as $item) { 
    $item_sub = $items->quantity * $items->price; 
    $item_total = $item_sub * ($taxrate/100); 

    $grand_total = $grand_total + $item_total; 
} 
+0

另外,他应该将税率定义为浮动而不是字符串。 – 2014-08-29 21:09:41

+0

@CharlotteDunois:php不会在意这种情况。 – 2014-08-29 21:10:29

+0

在这种情况下,PHP会将它转换为浮点数,但是要这样做一百次,如果您正在测试运行时,您会注意到它。 – 2014-08-29 21:26:00