소수점 두자리 이상 사용

마젠토 제품가격에 소수점 두자리 이상 사용방법

제품 가격과 주문 합계에 소수점 자리수 변환

마젠토는 기본적으로 제품가격, 주문합계(total, subtotal) 등등 모든 종류의 금액 관련 데이터베이스 필드에 decimal(12, 4)를 사용하므로 소수점 4자리 숫자까지 사용이 가능합니다. 하지만 코어모델에서 기본 소수점을 모두 2자리로 설정되어 있기 때문에 계산도 소수점 2자리로 계산되고 사이트에 보여지는 부분도 소수점 2자리 까지만 보여지게 되어있습니다.
제가 얼마전에 옵션과 구매수량에 따라서 제품가격이 천차만별로 바뀌는 모듈을 개발하게 되었는데 어떤 제품은 개당 최소 $0.0002까지 내려가는 경우여서 여러분과 공유할까 합니다.

 

어떻게 보면 복잡할것 같지만 실은 상당히 간단합니다.
제품의 가격을 특정 소수점 자리수로 표현하는데는 아래 두개의 파일을 수정해야 합니다.
– app/code/core/Mage/Core/Model/Store.php 에서 public function roundPrice($price)
– app/code/core/Mage/Directory/Model/Currency.php 에서 public function format($price, $options=array(), $includeContainer = true, $addBrackets = false)
이 두개의 function에서 디폴트로 소수점이 2로 정해져 있기 때문에 이것만 바꿔주면 됩니다.

 

각각의 기능을 이야기 하자면:
Mage_Core_Model_Store 모델의 roundPrice()는 제품을 쇼핑카트에 담을때 제품의 가격을 특정 소수점까지 계산하는 역할을 하고,
Mage_Directory_Model_Currency 모델의 format()은 제품의 가격 및 주문 합계를 특정 소수점 까지 보여주는 역할을 합니다.
위의 두 파일 모두 마젠토 코어모델이기 때문에 직접적인 수정을 피해야 하고, app/code/local/Mage 폴더에 override를 해야합니다.
우선 app/code/core/Mage/Core/Model/Store.php 파일과 app/code/core/Mage/Directory/Model/Currency.php 파일을 통째로
app/code/local/Mage/Core/Model/Store.php 와 app/code/local/Mage/Directory/Model/Currency.php 에 복사해야 합니다.
그후에 아래와 같이 수정합니다.
저의 경우엔 소수점 4자리수 까지 계산을 해야해서 2 대신 4를 썼습니다.

app/code/core/Mage/Core/Model/Store.php

1
2
3
4
5
public function roundPrice($price)
{
    // return round($price, 2);
    return round($price, 4); // 숫자는 0 - 4 중 원하는 소수점 자리
}

app/code/core/Mage/Directory/Model/Currency.php

1
2
3
4
5
public function format($price, $options=array(), $includeContainer = true, $addBrackets = false)
{
    // return $this->formatPrecision($price, 2, $options, $includeContainer, $addBrackets);
    return $this->formatPrecision($price, 4, $options, $includeContainer, $addBrackets);  // 숫자는 0 - 4 중 원하는 소수점 자리
}

 

위의 코드를 적용시키면 원래 쇼핑카트에 소수점 두자리로 보이던 제품 가격과 주문 합계가(첫번째 이미지) 두번째 이미지처럼 수소점 네자리 숫자로 바뀌어 보이게 됩니다.

쇼핑카트 - 소수점 두자리

쇼핑카트 – 소수점 두자리

쇼핑카트 - 소수점 네자리

쇼핑카트 – 소수점 네자리

 

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *