2個で1個口の発送ができる商品を売っています。1個または2個は1個口の送料で。3個または4個の場合は2個口。5個または6個の場合は3個口・・・・
このような送料の設定ができるように、KENTさんのショッピングカート→http://www.kent-web.com/cart/mart.html
を変更したいのですが、
求め方は、商品の総数を求めて1を足しそれを2で割り切り捨て(2で割って切り上げをするやり方がよくわからなかったので、このようにしました)し、それに都道府県別送料をかければいいのかなと思っています。
$numは各商品の数量
$postage2は都道府県別送料だと思います。
それを前提にmart_init.cgiを以下のような修正をしました。
foreachの{}内に(1)を入れ商品の総数を出し、送料表示の前らへんで(2)(3)を付け足しました。送料表示部分を$postage2から$postageallnumに変更。
(1)$allnum+=$num;
(2)$floor=int(($allnum+1)/2);
(3)$postageallnum=$floor*$postage2;
しかし、$postageallnumの値が$floorの値と同じになります。
なぜそうなるのでしょうか?perl初心者なので簡単なミスをしてると思うですが。
なお、元のソースはここに載せると著作権違反になると思うので載せることができませんお手数ですが上記URLで見てください。
No.3ベストアンサー
- 回答日時:
No2のものです
こんちは
$postage2 には $postageの値をカンマ区切り表記した文字列が格納されます。たとえば$postageの内容が1234だった場合には
$postage2には 1,234 という文字列が代入されます
1,234という文字列を数値として扱おうとすると、,より左の部分の1しか認識しません。
本来なら
3*1234 = 3702となるべきところが
3*"1,234" → 3*1 = 3となったのではないかと思われます
回答ありがとうございます。
なるほどそういうことだったのですね。
No2でお答え頂いた回答で動作自体は問題なく解決したのですが、
なぜ$postage2では思った数値が得られないかが疑問のままでした。
$postageに金額表記のためにコンマを入れた文字列が$postage2ということで言われてみれば納得です。
今回お答え頂いた回答で謎が解けました。
非常に助かりました。ありがとうございます。
No.2
- 回答日時:
こんちは
(3)$postageallnum=$floor*$postage2;
↓
(3)$postageallnum=$floor*$postage;
に変更してみてはどうでしょうか
No.1
- 回答日時:
申し訳ないけど、わざわざリンク先に行ってダウンロードして…
という手間はかけたくありませんので実際のソースがどうなのかはわかりませんが、
> (1)$allnum+=$num;
> (2)$floor=int(($allnum+1)/2);
> (3)$postageallnum=$floor*$postage2;
>
> しかし、$postageallnumの値が$floorの値と同じになります。
$postageallnum と $floor が同じ値になるというのなら、この式の場合
$postage2 が 1か0になっているとしか思えないのですがその辺はどうなんですか?
ロジックを確かめるために小さいスクリプトを組んでみると
use strict;
use warnings;
my $postage2 = 450;
foreach my $allnum (1..10) {
my $floor = int(($allnum+1)/2);
my $postageallnum = $floor*$postage2;
printf "\$allnum=%3d, \$floor=%3d, \$postageallnum=%5d\n", $allnum, $floor, $postageallnum;
}
$allnum= 1, $floor= 1, $postageallnum= 450
$allnum= 2, $floor= 1, $postageallnum= 450
$allnum= 3, $floor= 2, $postageallnum= 900
$allnum= 4, $floor= 2, $postageallnum= 900
$allnum= 5, $floor= 3, $postageallnum= 1350
$allnum= 6, $floor= 3, $postageallnum= 1350
$allnum= 7, $floor= 4, $postageallnum= 1800
$allnum= 8, $floor= 4, $postageallnum= 1800
$allnum= 9, $floor= 5, $postageallnum= 2250
$allnum= 10, $floor= 5, $postageallnum= 2250
ちゃんと動いているっぽいですが。
悪口になりかねないのであまり大きな声では言えませんがKENT氏の
発表しているスクリプトの多くはPerl 4でも動作できるようにしているために
my を使った宣言と use strict を組み合わせて使ってないとかいろいろあるので
ちょっとした変数名の打ち間違いも見つけにくいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ヤフオク! ヤフオク まとめて取引で配送方法が変わる場合 3 2022/09/06 13:55
- Amazon Amazon 1 2023/02/13 16:07
- その他(ネットショッピング・通販・ECサイト) 詐欺サイトでの返金について 6 2023/02/08 12:18
- その他(学校・勉強) 計算の仕方を教えてください。 ココナラで商品を販売することになったのですが、郵送する必要がでてきまし 1 2022/07/31 20:21
- ヤフオク! ヤフオク出品。「落札後に送料をお知らせする」はどうやって設定する? 2 2023/05/20 10:41
- Amazon アマゾン 7 2022/06/11 11:03
- Amazon amazonで海外へ荷物を送る時 1 2023/03/08 20:14
- HTML・CSS HTMLソースの質問 3 2022/07/28 13:29
- 消費税 消費税の納税額の計算 1 2023/02/19 18:12
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA split(文字列, ★) ★←複数...
-
文字列と数字を含むセルから数...
-
プログラミングでは、半角括弧...
-
vba アクティブシートの名前変...
-
CSVファイルの中で、「 , 」カ...
-
「カンマ」と「コンマ」は同じ...
-
何故、日本は未だに数字を3桁...
-
カンマ区切り
-
英数字のみ全角から半角に変換
-
EXCELからCSVにすると余計なカ...
-
tkinter widget ことえり変換で...
-
UWSC教えて
-
秀丸マクロで、あらかじめ選択...
-
文字コードの%E3%80%とは何です...
-
正規表現について VB6
-
特定の列のみ置換を行いたい
-
エクセル2003で、1つのセルに全...
-
Excelでカンマ区切りの合計をユ...
-
Delphi 文字列の中のタブをコン...
-
桁区切りについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パイソンエラーについて
-
Malformed UTF-8 character
-
GDBでデバッグするとき文字列の...
-
文字列と数字を含むセルから数...
-
Perl/Tk使用時のUTF-8コード文...
-
日本語文字列の指定長(byte)切出し
-
数字を文字列に変換し短縮化する
-
splitの逆の処理
-
Perl(Windows)の文法について
-
Perlで Right関数に近い処理を...
-
perlを使用しての特定行抽出に...
-
トリッププログラム!?
-
関数chop
-
正規表現での文字の抜き出し
-
プログラミング HSPの変数につ...
-
ワイルドカード処理
-
TRUE、FALSEと言う文字で、1、0...
-
VBA split(文字列, ★) ★←複数...
-
perlでのURL判定
-
カートの送料設定を2個まで1個...
おすすめ情報