채택완료

배송비 소수점 표시 문제.

해결을 못해서 다시 발제합니다. (http://sir.kr/qa/127681)

해외 쇼핑몰이여서 통화를 소수점으로 변환해서 사용하고 있구요 

( 가격표시부분을 DB에서 필드를 int에서 float로 바꾸었습니다.)

배송비를 쇼핑몰설정에서는  "4.59유로 로 입력을했구요 -> 관리자화면엔 잘 유지가 됩니다.

주문서에는 소수점이 빠진 "459"유로 라고 나오고 있습니다. 

 

화면에 배송비출력은 $send_cost 로 되고 있는데요  

 

 

아래 첨부한 코드에서 

$send_cost = get_sendcost($s_cart_id); 

여기부분이 배송비를 가져오는 부분인거 같은데 


애라모르겠다 

억지로459를 4.59로 맞추기위해서 

아래처럼 100을 나누기하면  

$send_cost = get_sendcost($s_cart_id)/100;

화면상에서는 4.59로 표시는 되지만 

최종 주문하기로 넘어가면 

하얀화면에 Error... 라는 메세지가 뜹니다. 

왜 관리자화면에 잘있던 소수점이 빠져버리고 

어느계산식에서 그런 현상이 생기는지 갈피를 못잡겠습니다. 

수동으로 100을 나누기하면 애러가 나는지 모르겠습니다. php 문법이 틀린건지..   

아래는 문제가 생기는 주문서 작성(orderform.sub.php)에서 

배송비 데이터를 가져오는 부분을 캡쳐했습니다. 

Copy
<?php        $tot_point = 0;        $tot_sell_price = 0;         $goods = $goods_it_id = "";        $goods_count = -1;         // $s_cart_id 로 현재 장바구니 자료 쿼리        $sql = " select a.ct_id,                        a.it_id,                        a.it_name,                        a.ct_price,                        a.ct_point,                        a.ct_qty,                        a.ct_status,                        a.ct_send_cost,                        a.it_sc_type,                        b.ca_id,                        b.ca_id2,                        b.ca_id3,                        b.it_notax                   from {$g5['g5_shop_cart_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id )                  where a.od_id = '$s_cart_id'                    and a.ct_select = '1' ";        $sql .= " group by a.it_id ";        $sql .= " order by a.ct_id ";        $result = sql_query($sql);         $good_info = '';        $it_send_cost = 0;        $it_cp_count = 0;         $comm_tax_mny = 0; // 과세금액        $comm_vat_mny = 0; // 부가세        $comm_free_mny = 0; // 면세금액        $tot_tax_mny = 0;         for ($i=0; $row=sql_fetch_array($result); $i++)        {            // 합계금액 계산            $sql = " select SUM(IF(io_type = 1, (io_price * ct_qty), ((ct_price + io_price) * ct_qty))) as price,                            SUM(ct_point * ct_qty) as point,                            SUM(ct_qty) as qty                        from {$g5['g5_shop_cart_table']}                        where it_id = '{$row['it_id']}'                          and od_id = '$s_cart_id' ";            $sum = sql_fetch($sql);             if (!$goods)            {                //$goods = addslashes($row[it_name]);                //$goods = get_text($row[it_name]);                $goods = preg_replace("/\'|\"|\||\,|\&|\;/", "", $row['it_name']);                $goods_it_id = $row['it_id'];            }            $goods_count++;             // 에스크로 상품정보            if($default['de_escrow_use']) {                if ($i>0)                    $good_info .= chr(30);                $good_info .= "seq=".($i+1).chr(31);                $good_info .= "ordr_numb={$od_id}_".sprintf("%04d", $i).chr(31);                $good_info .= "good_name=".addslashes($row['it_name']).chr(31);                $good_info .= "good_cntx=".$row['ct_qty'].chr(31);                $good_info .= "good_amtx=".$row['ct_price'].chr(31);            }             $image = get_it_image($row['it_id'], 50, 50);             $it_name = '<b>' . stripslashes($row['it_name']) . '</b>';            $it_options = print_item_options($row['it_id'], $s_cart_id);            if($it_options) {                $it_name .= '<div class="sod_opt">'.$it_options.'</div>';            }             // 복합과세금액            if($default['de_tax_flag_use']) {                if($row['it_notax']) {                    $comm_free_mny += $sum['price'];                } else {                    $tot_tax_mny += $sum['price'];                }            }             $point      = $sum['point'];            $sell_price = $sum['price'];             // 쿠폰            if($is_member) {                $cp_button = '';                $cp_count = 0;                 $sql = " select cp_id                            from {$g5['g5_shop_coupon_table']}                            where mb_id IN ( '{$member['mb_id']}', '전체회원' )                              and cp_start <= '".G5_TIME_YMD."'                              and cp_end >= '".G5_TIME_YMD."'                              and cp_minimum <= '$sell_price'                              and (                                    ( cp_method = '0' and cp_target = '{$row['it_id']}' )                                    OR                                    ( cp_method = '1' and ( cp_target IN ( '{$row['ca_id']}', '{$row['ca_id2']}', '{$row['ca_id3']}' ) ) )                                  ) ";                $res = sql_query($sql);                 for($k=0; $cp=sql_fetch_array($res); $k++) {                    if(is_used_coupon($member['mb_id'], $cp['cp_id']))                        continue;                     $cp_count++;                }                 if($cp_count) {                    $cp_button = '<button type="button" class="cp_btn btn_frmline">적용</button>';                    $it_cp_count++;                }            }             // 배송비            switch($row['ct_send_cost'])            {                case 1:                    $ct_send_cost = '착불';                    break;                case 2:                    $ct_send_cost = '무료';                    break;                default:                    $ct_send_cost = '선불';                    break;            }             // 조건부무료            if($row['it_sc_type'] == 2) {                $sendcost = get_item_sendcost($row['it_id'], $sum['price'], $sum['qty'], $s_cart_id);                 if($sendcost == 0)                    $ct_send_cost = '무료';            }        ?>         <tr>            <td class="sod_img"><?php echo $image; ?></td>            <td>                <input type="hidden" name="it_id[<?php echo $i; ?>]"    value="<?php echo $row['it_id']; ?>">                <input type="hidden" name="it_name[<?php echo $i; ?>]"  value="<?php echo get_text($row['it_name']); ?>">                <input type="hidden" name="it_price[<?php echo $i; ?>]" value="<?php echo $sell_price; ?>">                <input type="hidden" name="cp_id[<?php echo $i; ?>]" value="">                <input type="hidden" name="cp_price[<?php echo $i; ?>]" value="0">                <?php if($default['de_tax_flag_use']) { ?>                <input type="hidden" name="it_notax[<?php echo $i; ?>]" value="<?php echo $row['it_notax']; ?>">                <?php } ?>                <?php echo $it_name; ?>            </td>            <td class="td_num"><?php echo number_format($sum['qty']); ?></td>            <td class="td_numbig"><?php echo number_format($row['ct_price'],2); ?></td>            <td class="td_mngsmall"><?php echo $cp_button; ?></td>            <td class="td_numbig"><span class="total_price"><?php echo number_format($sell_price,2); ?></span></td>            <td class="td_numbig"><?php echo number_format($point); ?></td>            <td class="td_dvr"><?php echo $ct_send_cost; ?></td>        </tr>         <?php            $tot_point      += $point;            $tot_sell_price += $sell_price;        } // for 끝         if ($i == 0) {            //echo '<tr><td colspan="7" class="empty_table">장바구니에 담긴 상품이 없습니다.</td></tr>';            alert('장바구니가 비어 있습니다.', G5_SHOP_URL.'/cart.php');        } else {              // 배송비 계산            $send_cost = get_sendcost($s_cart_id);                    }         // 복합과세처리        if($default['de_tax_flag_use']) {            $comm_tax_mny = round(($tot_tax_mny + $send_cost) / 1.1);            $comm_vat_mny = ($tot_tax_mny + $send_cost) - $comm_tax_mny;        }        ?>
 
|

답변 1개 / 댓글 2개

채택된 답변
+20 포인트
2016-06-17 (금) 02:18:21

장바구니 배송비 필드도 float로 변경 하셨는지요.

it_sc_price 필드입니다. 

장바구니에 해당 필드에 값이 어떻게 입력되어 있는지 살펴 보시면 될 것 같습니다.

답변에 대한 댓글 2개

네 float로 변경되어 있습니다. 문제는 관리자화면에 입력한 배송비가 소수점을 무시하고 그대로 정수로 나온다는 점입니다. 459.00 으로 나옴
자체 해결했습니다.

shop.lib.php에
explode 배열 함수때문에 문제가 있었구요
$send_cost = preg_replace('/[^0-9]/', '', $send_cost_list[$k]);
부분에서 $send_cost_list[$k] 이것만 남기면 되네요.



[code]

$send_cost = 0;
if($default['de_send_cost_case'] == '차등' && $total_price >= 0 && $diff > 0) {
// 금액별차등 : 여러단계의 배송비 적용 가능
$send_cost_limit = explode(";", $default['de_send_cost_limit']);
$send_cost_list = explode(";", $default['de_send_cost_list']);
$send_cost = 0;
for ($k=0; $k<count($send_cost_limit); $k++) {
// 총판매금액이 배송비 상한가 보다 작다면
if ($total_price < preg_replace('/[^0-9]/', '', $send_cost_limit[$k])) {
$send_cost = preg_replace('/[^0-9]/', '', $send_cost_list[$k]);
break;
}
}
}

[/code]

답변을 작성하려면 로그인이 필요합니다.