CGI-BBS > SO−HO > ショッピングバスケット > 小数点以下の計算/表示について。


カレッヂ
カレッヂ


質問者 Carlos  投稿日 1/14(月) 05:35:51
当方「簡易ショッピングバスケットシステム」の設置/作動に成功しましたが、欧州におけるユーロ通貨環境での使用を計画しておりますので、消費税(現地では付加価値税)の計算が小数点2桁(ユーロ・セント)である必要があります。よって、税率計算が小数点2桁で表示されるようなスクリプトの修正の方法を御教示いただければ幸いです。
また、商品の金額表示も小数点2桁(ユーロ・セント)まで表示できるように、たとえば「17.5 ユーロ」ではなく「17.50 ユーロ」と表示できるような手法がありましたら、何方様か是非ともお教えいただけないでしょうか?
回答者 アルル  [削除]  投稿日 1/15(火) 01:29:21
perl の関数にprintf というのがあります。

$mon=34.789
printf "%2.4f",$mon

結果 34.7890 と表示されます。
詳しい文法はperlのマニュアルを見てください。
質問者 Carlos  [削除]  投稿日 1/15(火) 03:20:12
アルル様、早速の御教示有難うございました。
何とか自力で研究した結果、たとえば

printf "%5.2f",$shoukei2;

という文にて「小数点以上/最大5桁、小数点以下2桁/0も表示」ということで作動することが確認できましたが、数値表示が表示されるべき枠外の、予想もしないところに表示されてしまいます。
もし、この「簡易ショッピングバスケットシステム」のCGIスクリプトにおける具体的な修正箇所がお分かりの方がいらっしゃれば、どうか宜しく御教示ください。
回答者 アルル  [削除]  投稿日 1/15(火) 05:55:15
printf "%5.2f",$shoukei2;
これを直に組み込んではだめです。

オリジナルでは
print"<タグ>$shoukei2<タグ>";
となっているはずなので

$a=sprintf("%5.2f",$shoukei2);
print"<タグ>$a<タグ>";
このようにすれば表示されると思います。
質問者 Carlos  [削除]  投稿日 1/15(火) 07:39:59
前略、アルル様、大変お世話になっております。

御教示いただいた下記の一例の方法

$a=sprintf("%5.2f",$shoukei2);
print"<タグ>$a<タグ>";

にて、無事小数点以下の表示に成功いたしました。誠に有難うございました。
とはいえ、あと一つ問題が残っております。それは「消費税率(現地では付加価値税率)」の演算の問題です。この「簡易ショッピングバスケットシステム」は日本円における使用を前提としているためか、小数点以下の消費税率の計算は考慮されていないようです。たとえば14.75ユーロの買い物を行った場合、当地の税率(食品の場合6%)で計算すると、0.885ユーロ、小数点三位以下/四捨五入するとしても86ユーロ・セント(0.86ユーロ)の課税となるわけですが、当スクリプトでの表示は「0.00ユーロ」となってしまいます。
もし、御存じでしたらこの件に関する解決方法を御教示いただけないでしょうか?この問題が解決すれば私にとっては、ほぼ完璧な「ショッピングバスケットシステム」が完成するはずです。どうか、宜しくお願いいたします。
回答者 アルル  [削除]  投稿日 1/15(火) 13:22:18
営業ベースでの使用をお考えなら、この CGI をプリントアウトして
すべての動作が把握できるくらいの Perl の勉強をお奨めします。
CGI を把握していれば不具合の対応も早いものになるし
いろんなオプション機能も自作できるようになります。これを機にどうでしょうか?
-----
この「簡易ショッピングバスケットシステム」は日本円における使用を前提としているため
か、小数点以下の消費税率の計算は考慮されていないようです。たとえば14.75ユーロの買い物を行った場合、当地の税率(食品の場合6%)で計算すると、0.885ユーロ、小数点三位以下/四捨五入するとしても86ユーロ・セント(0.86ユーロ)の課税となるわけですが、当スクリプトでの表示は「0.00ユーロ」となってしまいます。
---
ヒントです。
日本でも消費税はあるので、小数点以下は計算されているはずです。
その結果の金額を関数を使って小数点を切り捨てて表示していると思います。
小数点を切り捨てる関数は?ということで調べてください。

ではがんばってください。
質問者 Carlos  [削除]  投稿日 1/19(土) 18:31:32
前略、アルル様、いつもお世話様です。

さて、小数点以下の消費税率の計算ですが「小数点を切り捨てる関数」つまり「整数として表示する関数」であるintを取り除いてやったところ問題なく作動することが分かりました。
どうも有難うございました。

このページは終了したので返信(回答)は書きこめません

Web裏技