電子書籍の厳選無料作品が豊富!

今回は、perlにて入力画面より税込価格を入力し、自動計算させて税抜き価格を表示させたい ということです。

しかし、今の記述方法ではきちんと計算されません。どういう記述をしたら良いのか?ご教授願います。
現在の記述は以下のようになっています。komipriceは、税込価格、nukipriceは税抜き価格です

$VD[$REC{Data}{nukiprice}]=sprintf("%.f",$VD[$REC{Data}{komiprice}]/1.05*1000000);
$VD[$REC{Data}{nukiprice}]=~s/(.*\d)(\d\d\d)(\d\d\d)/$1,$2/;

A 回答 (3件)

以下のようにしてください。


1.入力値がカンマ区切りなのでカンマをとる。
2.消費税抜きの価格にする。
3.結果を3桁で区切る。

------------------------
$in = $VD[$REC{Data}{komiprice}];
#カンマをとる
$in =~ s/,//g;
#消費税抜きの価格にする
$out=int($in/1.05);
#3桁で区切る
$out2 = sprintf("%d",$out);
$ll = length($out2);
for ($i =0 ; $i < $ll; $i++){
if ($i%3 == 0 && $i != 0){
substr($out,$ll-$i,0) = ",";
}
}
#結果を格納する
$VD[$REC{Data}{nukiprice}]=$out2;
-----------------------------------

この回答への補足

さっそくのご回答ありがとうございます。
百の位も問題なく計算され、今まで遠回りしてたのがうそみたいです。
ほんとうに助かりました。

あと、表示の際に3桁区切りで、カンマを入れて見やすくしたいのですが
どのような記述をすればよろしいのでしょうか?
現在、(1)の場合は、十万の位まで (2)は百万の位の時でしかカンマが出なかったりします。

(1)$VD[$REC{Data}{nukiprice}]=~s/(.*\d)(\d\d\d)/$1,$2/;

(2)$VD[$REC{Data}{nukiprice}]=~s/(.*\d)(\d\d\d)(\d\d\d)/$1,$2,$3/;

たぶん、if文で6桁の時は(1) 7桁以上なら(2)という記述が必要なんだと思いますが
実際にどういった記述があればよいのか?
お手数ですがご教授頂ければと思います。

補足日時:2005/07/04 09:34
    • good
    • 0
この回答へのお礼

実際に100万単位になるとカンマ表示がされません。
計算は問題なくされていますが、なにが原因なのでしょうか?

お礼日時:2005/07/11 18:30

前回の回答の


--------------------
#3桁で区切る
$out2 = sprintf("%d",$out);
$ll = length($out2);
for ($i =0 ; $i < $ll; $i++){
if ($i%3 == 0 && $i != 0){
substr($out,$ll-$i,0) = ",";
}
}
#結果を格納する
$VD[$REC{Data}{nukiprice}]=$out2;
--------------------------------
が3桁毎にカンマで区切るところです。
$out2に3桁毎に区切った結果がはいっています。
出力結果が何桁でも対応しているはずですが、
期待した結果が得られませんでしょうか?
尚、
(1)$VD[$REC{Data}{nukiprice}]=~s/(.*\d)(\d\d\d)/$1,$2/;

(2)$VD[$REC{Data}{nukiprice}]=~s/(.*\d)(\d\d\d)(\d\d\d)/$1,$2,$3/;
の処理は必要ありません。

この回答への補足

while($VD[$REC{Data}{$_}]=~s/^([+-]?\d+)(\d{3})/$1,$2/g){}
}
}else{ @VU=@vtmp }


という一文がこの処理の前にあるのですがこれは関係ないのでしょうか?

(1)$VD[$REC{Data}{nukiprice}]=~s/(.*\d)(\d\d\d)/$1,$2/;

(2)$VD[$REC{Data}{nukiprice}]=~s/(.*\d)(\d\d\d)(\d\d\d)/$1,$2,$3/;
ちなみにこの一文がなければ、カンマ区切りされませんでした。

補足日時:2005/07/19 12:13
    • good
    • 0

> きちんと計算されません。



何がどう「きちんと」していないかを、ちゃんと説明しないと適切な回答がつかないと思います。

小数点が出てしまうのが問題だとしたら、以下のようにするとか。

$price -= int( $price * 5 / 105 );

この回答への補足

きちんと計算されないというのは、
一例を挙げると、19,950円(税込)だとすると
本来であれば、税抜き価格は19,000円となるはずが
19,024円と表示されてしまいます。
24円の部分が余計なのです。

しかも42,000円の場合だときちんと税抜き40,000円と表示されます。
この1件以外は、すべての数字において端数が表示されてしまいます。

補足日時:2005/07/03 11:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!