サイトカレンダをスキップ

«
2017年 12月
»
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

-

ログイン

ログイン

QRコード

QR code


 掲示板目次 > Magento全般 > カスタマイズ質問 新規投稿 返信投稿
 消費税の計算について
 
analog8
 2009年3月12日 17:26 JST (参照数 40162回)  
掲示板 Newbie
Newbie

状態: オフライン


登録日: 2009年2月19日
投稿数: 4
標準では、消費税の計算が、切捨てになってますが、これを切り上げ・
四捨五入に変更できますか。
また、消費税計算が、税抜き価格x個数x税になっている為、
計算が合いません。
税込み価格x個数にする方法はありますでしょうか。
よろしくお願い致します。
以上

 
プロフィール メール
引用して書き込む
hirokazu_nishi
 2009年3月13日 01:45 JST  
掲示板 管理者
管理者

状態: オフライン


登録日: 2008年2月 9日
投稿数: 470
rackです。

切り捨てではなく、round関数を使って丸めています。
日本円で小数点以下を消すには他のスレッドで書いたとおりですが、Magentoそのものとしては丸めた上で、Zend_Currencyで調整しています。
日本円で小数点以下を消すためにZend_Currencyの設定を変更した場合は、その辺も含めて調整する必要がありますね。

手っ取り早いのは小数点以下が出ないように価格を調整することでしょうか。

また、消費税計算が、税抜き価格x個数x税になっている為、
計算が合いません。
税込み価格x個数にする方法はありますでしょうか。


ということですが、何と合わないのでしょうか?
前述の切捨てなどの処理とあわせて不一致がおきる、ということでしょうか?

Magento技術サポート・日本語化エクステンション・セキュリティ診断提供中です。日本語ガイドブックの販売・レンタルサーバサービス開始しました。 http://principle-works.jp/
 
プロフィール メール ホームページ
引用して書き込む
analog8
 2009年3月17日 17:54 JST  
掲示板 Newbie
Newbie

状態: オフライン


登録日: 2009年2月19日
投稿数: 4
説明不足で申し訳ありません。
現在のmagentoのバージョンは、1.2.1.1です。

商品の本体価格を950円としますと、5%に消費税を掛けますと
950 x 1.05 =997.5円となります。
よって、/lib/Zend/Currency.phpの
'precision' =>2, を 0 に変更した場合は、表示上は
997円になります。(この場合、小売では切り捨てにて販売になります)
この状態で個数3個で購入しますと、
997 x 3 = 3991円となるはずが、 => 3992円と表示されます。
'precision' =>0,  に戻して、確認しますと
本体価格 950.00
税込み  997.50
個数    3
小計本体価格 2850.0
小計税込み  2992.50
と表示されます。
①小売の場合 税込み価格 X 個数になってほしい
②税込み後の処理は、切捨て・四捨五入・切り上げのいずれかの
  処理にした。

申し訳ありませんが、roundを使用した処理のファイルを発見できておりません。
ご教授よろしくお願い致します。
以上

 
プロフィール メール
引用して書き込む
analog8
 2009年3月19日 16:11 JST  
掲示板 Newbie
Newbie

状態: オフライン


登録日: 2009年2月19日
投稿数: 4
お世話になっております。

あれから、magentoのphpファイルとにらみ合いを続けておりましたところ、app/code/core/Mage/Core/Model/Store.phpのファイルにroundの記述を見つけました。

609~

public function roundPrice($price)
{
return round($price, 2);
}

となっていましたので、0に書き直したところ、すっきりとしました。

まだまだ、わからない部分がありますがので調べていきたいです。

 
プロフィール メール
引用して書き込む
analog8
 2009年3月19日 16:36 JST  
掲示板 Newbie
Newbie

状態: オフライン


登録日: 2009年2月19日
投稿数: 4
申し訳ありません。
先ほどの書き込みなのですが、表示だけが丸まって計算には、影響ありませんでした。

 
プロフィール メール
引用して書き込む
hogehoge
 2009年3月19日 19:58 JST  
掲示板 Newbie
Newbie

状態: オフライン


登録日: 2009年3月13日
投稿数: 10
roundは確実な四捨五入にならないので、
確実に四捨五入するのであれば、
floor($price + 0.5)に書き換えてしまいましょう。

php5.3.0で、第3引数が追加されたので、php5.3.0以上なら
round()の第3引数指定することで意図した通りに出来るかも知れません。

#切り上げなら
ceil($price)

#切捨てなら
floor($price)


金額計算部分は突っ込んで見てないので、
もしroundPriceメソッドを介さずに合計金額等の計算が行われていたとしたら
roundPriceを変更しても意味を成さないことになります・・・

 
プロフィール メール
引用して書き込む
hogehoge
 2009年3月19日 21:02 JST  
掲示板 Newbie
Newbie

状態: オフライン


登録日: 2009年3月13日
投稿数: 10
追記
ちょっと誤解してました。
※roundPriceメソッド書き換えると余計に狂いましたので、やらないように。


問題点は、全部外税計算になってるということですね。。
ちょっと調べてみよう・x・

 
プロフィール メール
引用して書き込む
hirokazu_nishi
 2009年3月20日 16:27 JST  
掲示板 管理者
管理者

状態: オフライン


登録日: 2008年2月 9日
投稿数: 470
コードを追っていくと、しまいにZend/Locale/Math.phpとか、Zend/Locale/Format.phpにまでたどり着いてしまいました・・・。

Zend_Locale_FormatがZend_Locale_Mathのroundで四捨五入してますね。precisionを0にした場合は411行目で小数点以下が抹殺されて、そのまま最後まで処理されるみたいです。

この場合、precisionを0にすると当然端数計算が狂います。
ってことでさらに調べると、Zend_Currencyの170行目でZend_Locale_FormatのtoNumberを呼び出しています。

ここで第二引数の配列にnumber_formatキーを追加し、「#,##0.###」というような数値のフォーマット文字列を加えてやると、ちゃんと計算してくれるようになりました。

細かいことはもう少し調べようと思いますが、とりあえず計算のつじつまは合いますw

Magento技術サポート・日本語化エクステンション・セキュリティ診断提供中です。日本語ガイドブックの販売・レンタルサーバサービス開始しました。 http://principle-works.jp/
 
プロフィール メール ホームページ
引用して書き込む
hirokazu_nishi
 2009年3月20日 16:30 JST  
掲示板 管理者
管理者

状態: オフライン


登録日: 2008年2月 9日
投稿数: 470
合ってると思ったら、まだ計算間違いが出る可能性ありますね・・・。
これは厄介です。

Magento技術サポート・日本語化エクステンション・セキュリティ診断提供中です。日本語ガイドブックの販売・レンタルサーバサービス開始しました。 http://principle-works.jp/
 
プロフィール メール ホームページ
引用して書き込む
内容生成: 6.92 秒
新規投稿 返信投稿


通常 通常
注目トピック 注目トピック
ロック済 ロック済
新着 新着
注目トピック 新着 注目トピック 新着
ロック済トピック 新着 ロック済トピック 新着
ゲストユーザの投稿を見る 
ゲストユーザ投稿可能 
HTML許可 
バッドワードをチェック