배송비 소수점 표시 문제.

배송비 소수점 표시 문제.

QA

배송비 소수점 표시 문제.

본문

해결을 못해서 다시 발제합니다. (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)에서 

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

 

 


 
       <?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

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

it_sc_price 필드입니다. 

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

 

자체 해결했습니다.

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





  $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;
            }
        }
    }

답변을 작성하시기 전에 로그인 해주세요.
전체 69
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT