
今回は、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/;

No.2ベストアンサー
- 回答日時:
以下のようにしてください。
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)という記述が必要なんだと思いますが
実際にどういった記述があればよいのか?
お手数ですがご教授頂ければと思います。

No.3
- 回答日時:
前回の回答の
--------------------
#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/;
ちなみにこの一文がなければ、カンマ区切りされませんでした。
No.1
- 回答日時:
> きちんと計算されません。
何がどう「きちんと」していないかを、ちゃんと説明しないと適切な回答がつかないと思います。
小数点が出てしまうのが問題だとしたら、以下のようにするとか。
$price -= int( $price * 5 / 105 );
この回答への補足
きちんと計算されないというのは、
一例を挙げると、19,950円(税込)だとすると
本来であれば、税抜き価格は19,000円となるはずが
19,024円と表示されてしまいます。
24円の部分が余計なのです。
しかも42,000円の場合だときちんと税抜き40,000円と表示されます。
この1件以外は、すべての数字において端数が表示されてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大容量テキストファイルから任...
-
エクセルVBA コードが同じでも...
-
全角と半角文字が混在している...
-
openした後、closeしないでプロ...
-
バッチファイルの作り方(CSV→...
-
[Perl]ファイル出力のエンコー...
-
JSP URLに表示される拡張子 .jsp
-
Windowsで複数のファイルを同じ...
-
【エクセル】改行無しテキスト...
-
1行がやたら長いテキストをバッ...
-
エディターでは改行なのにメモ...
-
batファイルでrenameができませ...
-
Perl で ディレクトリ及びサブ...
-
重複するデータを抽出できる秀...
-
FindFirstFileとFindNextFileで...
-
エラー 'dir.h' : No such fi...
-
perlのflock関数でロックをかけ...
-
空白を含むディレクトリにある...
-
C言語で特定の行を抽出する方法...
-
C++でのテキストファイル読み込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
vimでのutf8の取扱について
-
perl5.8.3のunicode環境で日本...
-
ファイル出力をUTF8Nではなくて...
-
csv2wiki.plのエンコーディング...
-
utf-8での日本語正規表現の書き方
-
<STDIN>とARGVとの振る舞いの違...
-
[Perl]Shift-JISのXMLを解析する場
-
Perl出力をUTF-8に指定する方法
-
Perl UTF8で出力
-
HTTP::Request::Common qw(POST...
-
[perl5.8] SJISで出力したはず...
-
perlをwindows環境でshift-jis...
-
Perlの文字コードを意識したフ...
-
Perl utf8上でshiftjisをデコード
-
does not map to shiftjis は解...
-
文字を一文字ずつ区切りたい
-
初心者で、困っています。(文...
-
perlの自作ライブラリについて
-
複数種類の括弧でくくられてな...
おすすめ情報