• ベストアンサー

IF文の初歩的質問

フリーのショッピングカートに送料を足したいのですが、 合計額5,000円以上なら無料,そうでなければ500円と表示できません。perlはほとんど使っていないのでここでつまづいています。 if ($goukei2 > 5000 ) { print "無料\n"; } else { print "500円\n"; }

質問者が選んだベストアンサー

  • ベストアンサー
  • burn
  • ベストアンサー率65% (25/38)
回答No.2

$zeibetsu_goukei2は3桁ごとにカンマで区切った 文字列です。 文字列は数値と比較する事はできません。 $zeibetsu_goukei2を$zeibetsu_goukeiとすれば、上手く行くと思いますよ。

s-holmes
質問者

お礼

お手数をおかけしました。文字列だったわけですね、どうりで何の反応もしなかったわけでした。CGIというだけでビビッってしまって、「解読」しようというエネルギーがわいて来ない現状です。ありがとうございました。これを機会に少し勉強させていただきます。

その他の回答 (1)

  • burn
  • ベストアンサー率65% (25/38)
回答No.1

この構文については、問題ないと思いますよ。 この構文だけでは何とも言えませんが、$goukei2という変数は合計値に","カンマを入れたものではないですか? $goukei2を検索してみて、 $goukei2 = $goukei; 1 while $goukei2=~ s/(.*\d)(\d\d\d)/$1,$2/g; といった構文がないか確認してみて下さい。 もし、該当する場合は大元の$goukeiを使って、比較させて見て下さい。 それでも上手く行かない場合は、この構文自体を通っていない可能性があります。 Perlの場合、VBのような便利なツールがあまり無いため、 if ($goukei2 > 5000 ) { print "無料\n"; } else { print "500円\n"; } の前あたりに、例えば$test="pass";でも付けて、 HTMLで書き出してみて、"pass"と表示されたら、通過している、表示されなかったら通過していないと言う形で プログラムの通過状況をチェックしてみてください。 もし、通過していない場合は、その前の構文に問題があります。

s-holmes
質問者

補足

回答ありがとうございました。まだ解決していなくて、合計が10,000円以上でも送料が表示されてしまいます。 長いのですが、ソースを提示します。御助言いただけると助かります。 1 while $zeibetsu_goukei2 =~ s/(.*\d)(\d\d\d)/$1,$2/g; if ($taxrate != 0) {$tax = int($zeibetsu_goukei * ($taxrate / 100)); $sougoukei = $zeibetsu_goukei + $tax;1 while $sougoukei =~ s/(.*\d)(\d\d\d)/$1,$2/g; $zei = '税別'; } else { $zei = ''; } print "<tr><th bgcolor=\"azure\" colspan=4>$zei合計</th><th bgcolor=\"azure\">$zeibetsu_goukei2円</th><th></th></tr>\n"; if ($zeibetsu_goukei2 >= 5000 ) { print "<tr><th bgcolor=\"azure\" colspan=4>送料</th><th bgcolor=\"azure\">0円</th><th></th></tr>\n"; } else { print "<tr><th bgcolor=\"azure\" colspan=4>300円</th><th bgcolor=\"azure\">300円</th><th></th></tr>\n"; } if ($taxrate != 0) { print "<tr><th bgcolor=\"azure\" colspan=4>消費税$taxrate\%($tax円)込み総合計</th><th bgcolor=\"azure\">$sougoukei円</th><th></th></tr>\n"; } print "</table><p>\n";

関連するQ&A