1.7에서 반올림 문제의 상태는 무엇입니까?


27

우리는 Magento CE 1.7을 사용하고 있으며 다양한 반올림 문제가 있습니다. 다양한 계산에서 0,01 EUR의 차이가 있습니다.

기본 문제는 상품 가격이 포함되어있을 수 있습니다. 세.

공동 프로그래머 Mage_Core_Model_Store::roundPrice()는 4 자리 정밀도로 계산 하는 방법을 덮어 썼습니다 . 그러나 이것은 PayPal 결제에 문제를 일으키는 것으로 보입니다.

이러한 문제에 대한 해결책이 있습니까?

편집하다:

우리는 실제로 기본적으로 반올림 4 자리를 추가하는 공식 핵심 패치를 시도 \Mage_Tax_Model_Sales_Total_Quote_Shipping::_round, \Mage_Tax_Model_Sales_Total_Quote_Subtotal::_deltaRound\Mage_Tax_Model_Sales_Total_Quote_Tax::_deltaRound쿠폰 반올림 문제가 아니라 페이팔 문제를 해결한다.


내가 기억하는 한 Magento는 소수점 4 자리로 가격을 저장합니다. 따라서 가격이 소수점 4 자리로 입력되면 계산이 정확합니다. 그러나 나는 틀릴 수 있습니다.
user487772

1
"4 dec. points 입력"은 무엇을 의미합니까? 그러나 Magento 반올림은 12 월 2 일에서 작동합니다. 전철기. 또한 PayPal 인터페이스는 2 12 월과 함께 작동한다고 생각합니다. 포인트-문제가 시작되는 곳으로 보입니다.
Alex

내가 정확하게 기억한다면, 소수점 4 자리로 admin에 가격을 입력하면 소수점 4 자리로 db에 저장됩니다. 그런 다음 출력 중에 2 포인트로 반올림되지만 소수점 4 자리의 가격이 반올림되므로 반올림이 정확합니다.
user487772

물론-특히 백분율 기반 쿠폰 코드가 관련된 경우 총 계산에 문제가 있습니다.
Alex

아, 그럼 질문이 잘못되었습니다. 죄송합니다.
user487772

답변:


10

핵심 Magento 세금 모듈 내에서 설명 된 시나리오를 다루는 몇 가지 반올림 문제를 알고 있습니다. 현재 우리는 다가오는 1.13 릴리스에 대해 이러한 문제를 해결하고 있습니다. 이러한 반올림 문제로 인해 장바구니의 개별 항목이 올바르게 추가되는지 확인하는 간단한 페이팔 검사가 시작됩니다. Fabian의 패치는 Paypal 수표를 단기간에 처리하는 것으로 보입니다.

Magento Tax 모듈을 개선 할 수있는 방법에 대한 질문, 의견 또는 제안이 있으시면 언제든지 주저하지 말고 세금을 담당하는 제품 관리자입니다.

감사합니다, 척


큰! 어떤 문제가 해결되는지 보여줄 수있는 테스트 스위트가 있습니까?
Alex

1
척, 확인하기 위해 사용자 정보를 설정 하시겠습니까?
benmarks

테스트는 내부 전용입니다. 알려진 반올림 문제에 대한 자세한 내용은 약간 흥미 롭습니다. 고객은 가격, 세율, 할인 등의 특정 조합을 사용하여 특정 세금 구성과 연관된 것으로 간주합니다. 1.13에 대한 우리의 접근 방식은 일반적인 세금 구성을 식별하고 # 조합이 수학적으로 반올림 오류를 생성하지 않고 특정 태그를 지정하지 않도록하는 것입니다 피해야 할 위험한 구성으로 구성 (소형 코너 케이스).

주제를 조금 벗어 났지만 CE 1.8 버전도 있음을 의미합니까?
Sergei Guk 2013

예-CE 릴리스는 한 달 정도 지연된 EE 릴리스를 제공합니다. 1.13은 다음 EE 릴리스입니다.

7

Andreas Vogt 덕분에 Paypal 라운드 버그를 해결하는 모듈을 만들었습니다. Andreas는 몇 가지 핵심 해킹 파일을 제공했으며 모듈을 만들었습니다. 합계가 올바른지 확인하고 그렇지 않은 경우 수정합니다.

Afaik 핵심 핵은 야생에서 테스트되었습니다. 많은 사람들이 모듈을 요청했지만 작동하는지에 대한 피드백은 없었습니다. 그러나 단위 테스트입니다! (페이팔 문제가 무엇인지 전혀 몰랐기 때문에 다시 쓰기 작업 만 가능합니다. ;-))

https://github.com/magento-hackathon/PaypalRoundBugfix


1
흠 .. 정확히 어떤 버그를 수정합니까? cart-line-items-transfer 버그처럼 보입니다. 실제로 카트 전송을 해제했습니다. 그리고 4 자리 반올림 패치를 적용해야합니까?
Alex

하나 이상의 문제가 있습니까? 내가 말했듯이, 나는 그것이 정확히 어떻게
고쳐질 지 모른다

5

우리는 페이팔 반올림 버그와 100 % 할인 쿠폰 코드 문제에 직면하고 있습니다. 순 가격이 3 자리 숫자 5 (3,325) 인 가격 (세금 포함 Eur 3,99 등)에만 문제가 있습니다. 또한 세금 (여기서는 20 %)은 세 번째 자리에 5 (0,665)입니다. 따라서 가격을 반올림하고 추가하면 (페이팔과 마 젠토가하는 것) 총액은 기본 가격 (유로 4,00)보다 0.01보다 높습니다.

올바른 계산은 Eur 3,32 net + Eur 0,67 tax = Eur 3,99 여야합니다.

우리는 또한 일반적인 해결책을 찾으려고 노력하면서 페이팔 반올림 수정을 시도해보십시오!


좋아요, 문제가 있으면 말씀해주세요. 버그 픽스를 자연스럽게 도와주고 필요할 경우 디버깅하고 싶습니다!
Fabian Blechschmidt

1
참고로 설명 된 문제는 곧 출시 될 릴리스 (1.8 CE / 1.13 EE)에서 해결되었습니다.
Chuck

@Chuck 1.13.0.1의 Mage_Tax_Model_Sales_Total_Quote_Tax를 사용 하여이 시나리오를 테스트했으며 1.12 프로젝트의 드롭 인 대체로 문제를 해결 한 것으로 보입니다. 매우 감사합니다. 1.8CE에 대한 ETA가 아직 있습니까?
Jonathan Day

4

가격, 수량, 할인, 세금 및 정밀도 사이에는 일반적인 관계가 있습니다.

Assume:
x is the price
y is the percentage
s is the rounded sub-total

2 Directions
A) incl. Tax => excl. Tax => incl. Tax
B) excl. => incl. => excl.

중요한 문제는 최대로 계산하는 반올림 된 소계입니다. 오류. 2 개의 소수는 5 * 10 ^ -3을 의미합니다.

A) x * 10 ^ 2 / (y + 10 ^ 2) // s * (y + 10 ^ 2) / 10 ^ 2

B) x * (y + 10 ^ 2) / 10 ^ 2 // s * 10 ^ 2 / (10 ^ 2 + y)

A)
Subtotal precision 2 fractional digits:
5*10^-3*(y+10^2)/10^2 => (y+10^2)/10^2<1 => no y
3 fractional digits:
5*10^-4*(y+10^2)/10^2 => (y+10^2)/10^2<10 => y<900
4 fractional digits:
5*10^-5*(y+10^2)/10^2 => (y+10^2)/10^2<10^2 => y<90900
(must be a very bad country)

......

B)
Subtotal precision 2 fractional digits:
(5*10^-3)*10^2/(10^2+y) => 10^2/(10^2+y)&lt;1 => every y

할인이나 세금으로 계산 하고 가격 을 다시 계산 하려면 다음 설명이 유용 할 수 있습니다. 프론트 엔드의 경우를 모르기 때문에 인턴 계산이 가능합니다. A) 총계 => 세금 / 할인 => 총계 B) 세금 / 할인 => 총계 => 세금 / 할인

A) x * y / 10 ^ 2 // s * 10 ^ 2 / y

B) x * 10 ^ 2 / y // s * y / 10 ^ 2

A) Subtotal precision 2 fractional digits:
(5*10^-3)*10^2/y => 10^2/y < 1 => y>10^2
Subtotal precision 3 fractional digits:
(5*10^-4)*10^2/y => 10^2/y < 10 => y>10
Subtotal precision 4 fractional digits:
... 10^2/y < 10^2 => y>1

정밀도가 2 자리 인 경우 NO FRACTIONAL DIGITS의 요율이 있어야합니다. 예 : 총계 : 15,15 세율 : 0,3 % => 세금 0,04545 => 반올림 된 0,0455 세금 : 0,0455 => 총계 : 15,17

B) Subtotal precision 2 fractional digits:
(5*10^-3)*y/10^2 => y/10^2 &lt; 1 => y < 10^2

a가 정밀도이면, y는 a + 2보다 작아야합니다.

수량을 처리하는 경우 참고하십시오. 오류가 곱해집니다. 따라서 최대 10 ^ 5 인 경우 정밀도는 7이어야합니다. 오프셋으로 계산하는 경우에만 걱정됩니다!

추가 (2013 년 9 월 10 일 마 젠토 버전 1.7.0.2) Brutto <=> Netto and Taxes // America <=> 오래된 유럽 세트는 정수 (센트)이며 매핑
f (x) = round (a * x) a> 1은 형용사가 아닙니다. 내 말에 따르면 : 모든 가격에 포함되지는 않습니다. 가격 별도가 존재합니다. 또는 때때로 2 개의 가격이 포함됩니다. 하나의 가격 제외. 또는 계산 방법에 따라 2 가지 다른 결과를 얻을 수 있습니다

독일의 실제 사례 :

포함하여 가격을 입력하려고합니다. 세금 : 19,95 가격이 16,76 (2 자리)가됩니다. 세금 (19 %). 19 %의 세금을 계산하면 (16,76 * 0.19) 3,18이됩니다. (주의 : 19.95 * 019 / 1.19 ~ 3.19)

따라서 1 센트의 차이가 있습니다. 16,76 => 19.94 16.77 => 19.96

netto의 땅-미국에 가격 19,95가 없습니다.

따라서 가능한 한 원래 가격으로 계산하십시오. 가격을 포함하려면 입력 가격과 세금 (파산 한 숫자)을 사용하십시오.

PayPal은이 사기 검사를 받았습니다. 지금은 확실하지 않습니다.하지만 PayPal은 magento가 제공 한 숫자를 추가합니다. http://fabiankrueger.de/blog/magento-und-paypayl-rundungsfehler/를 참조 하십시오. 이것이 사실이 아니며 PayPal이 세금 또는 총액을 다시 계산하는 경우이 문제를 해결할 수 없습니다. 그렇지 않으면 가격이 잘못되었거나 맞습니다. . 거기서 해결하십시오. 나를 위해 그것은 작동하는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.