[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
114: デフォルトの名無しさん [] 2019/11/06(水) 03:46:51.16 ID:QwLiS9cf >>111 バクではなく仕様。 ちなみにPython,Tclで確認してみましたが同じ出力結果になりました。 どんな言語でも金額の計算や小数点の桁を調整をする場合、 int(切り捨て)、round(四捨五入)、ceil(切り上げ)などで処理するか、 出力時に、printfやsprintfを使って、"%.0f"などを指定して桁を合わせる 必要があると思います。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/114
115: デフォルトの名無しさん [sage] 2019/11/06(水) 03:51:32.22 ID:ZoqI13Ph あるよ use bigrat; my %ISO_number = ( 100 => 0, 125 => 1/3, 160 => 2/3, 200 => 1, 250 => 4/3, 320 => 5/3, 400 => 2, 500 => 7/3, 640 => 8/3, 800 => 3, 1000 => 10/3, 1250 => 11/3, 1600 => 4, 2000 => 13/3, 2500 => 14/3, 3200 => 5, 4000 => 16/3, 5000 => 17/3, 6400 => 6, 8000 => 19/3, 10000 => 20/3, 12800 => 7, ); # dirty hack: 0/1 force rational type # warning: if it locate last, sum goes WRONG! printf "%s\n", 0/1 + $shutter_speed{$ss} + $F_number{$F} - $ISO_number{$ISO}; http://mevius.5ch.net/test/read.cgi/tech/1548981877/115
116: デフォルトの名無しさん [sage] 2019/11/06(水) 09:06:26.53 ID:dfSHCt1W 浮動小数点の問題は知っていたが、こうなる事は初めて知った。危ないもんだな。 $c = $a / $b; # $c = 500 $e = int($c); # $e = 499 http://mevius.5ch.net/test/read.cgi/tech/1548981877/116
117: デフォルトの名無しさん [] 2019/11/06(水) 09:28:51.28 ID:i85ttsqs >>111 それはバグではないし、昔々からある超有名な仕様。知らないのはお前だけ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/117
118: デフォルトの名無しさん [] 2019/11/06(水) 10:08:35.95 ID:yvB3xxPc >>112 >>113 >>114 >>117 仕様で他の言語でもあるのですね。Perlで明示的な型指定とかはほぼ考えたことが無かった(1.08の時は意図した結果が得られていた)ので、勉強してみます。 ありがとうございます。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/118
119: デフォルトの名無しさん [] 2019/11/06(水) 10:29:25.24 ID:i85ttsqs 言語というよりはライブラリやCPUの問題だ。 しかしだいたいのメジャーな言語が採用しちゃってるので言語に関係なく出ると思って良い。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/119
120: デフォルトの名無しさん [sage] 2019/11/06(水) 17:59:53.94 ID:j94j+HrP 言語仕様っていうと違和感あるね 意図してこうしてますって感じで IEEE 754の仕様といえばそうなのかもしれんがあれは規格であって 仕様とはまたニュアンスが違う なんつーか実数扱うときはそんなもんという感覚 http://mevius.5ch.net/test/read.cgi/tech/1548981877/120
121: デフォルトの名無しさん [] 2019/11/06(水) 18:58:09.30 ID:yvB3xxPc >>111 一応、取った対応策です(消費税計算なので精度は不要) 除算解は有効桁数以下が切り捨てになり表示などで見える値以下になると想定しました $a = 550; $b = 1.1; $c = ; $tax= int($a - $a / $b); # $tax = 50 $net = $a - $tax; # $net = 500 端数を残したまま税込から除算解を引いてintして税とし、税込から税を引いて本体としました とりあえず期待した結果は得られています ありがとうございました。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/121
122: デフォルトの名無しさん [] 2019/11/06(水) 18:59:08.05 ID:yvB3xxPc $c = ; この行余計でした http://mevius.5ch.net/test/read.cgi/tech/1548981877/122
123: デフォルトの名無しさん [sage] 2019/11/06(水) 19:44:41.92 ID:mEOqpT9o >>120 C/C++なら規格が精密なのでそういう違和感もわかるが、Perlの場合は逆におかしいやろ。w http://mevius.5ch.net/test/read.cgi/tech/1548981877/123
124: デフォルトの名無しさん [sage] 2019/11/06(水) 19:52:26.69 ID:mEOqpT9o >>121 税率によってはきっとアカン場合がありそう。。。 単純な切り捨てはヤバいような。 まあ、そこまでの精度はイランのやろけども。 ちなみに、今回のケースなら、$x/1.1とするのではなく、$x*100/110としたほうが安定しそう? http://mevius.5ch.net/test/read.cgi/tech/1548981877/124
125: デフォルトの名無しさん [] 2019/11/06(水) 20:39:05.70 ID:yvB3xxPc >>124 うちは税込ものを分離する時は消費税側で小数点以下切り捨てなのでOKなのです 四捨五入とか会計方針によっては稀に問題が出るかもしれませんね http://mevius.5ch.net/test/read.cgi/tech/1548981877/125
126: デフォルトの名無しさん [] 2019/11/06(水) 21:15:49.18 ID:i85ttsqs 1.1を掛けるなら11を掛けてから10で割った方が良いかもな。そうすると正数計算でやれる。 切り上げや四捨五入をしたい場合は10で割る前に一桁目を見て10を足したり足さなかったりすれば良い。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/126
127: デフォルトの名無しさん [] 2019/11/06(水) 21:18:49.26 ID:i85ttsqs ああ。逆か。税込みから本体と税を求めるのか。でも考え方は同じだな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/127
128: デフォルトの名無しさん [sage] 2019/11/07(木) 00:06:59.16 ID:gr4VkOsJ >>125 違うぞ。今回の問題点をちゃんとわかってるか? 1.1と書いたリテラルが、実際の値は1.10...となっていて、1.1よりも大きかったことだぞ。 誤差の具合によっては、正確には切り捨てが不要な値でも、除数が大きいせいで計算結果が実際よりも小さい値になってしまって、してはいけない切り捨てが発生してしまう可能性はないんかね。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/128
129: デフォルトの名無しさん [sage] 2019/11/07(木) 00:07:26.65 ID:gr4VkOsJ >>126 >>124 http://mevius.5ch.net/test/read.cgi/tech/1548981877/129
130: デフォルトの名無しさん [] 2019/11/07(木) 01:08:34.48 ID:q6f07NqD >>128 消費税は小数点を使わず整数計算で 10 /110 8 / 108 で計算するようにします アドバイスありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1548981877/130
131: デフォルトの名無しさん [] 2019/11/07(木) 01:12:13.17 ID:q6f07NqD >>128 うちの会社ではあんなに国家予算並みにたくさん「0」が出てくる消費税計算は無いのでとりあえずの回避でも大丈夫です とはいえ先ほどのように整数計算に修正しようと思います http://mevius.5ch.net/test/read.cgi/tech/1548981877/131
132: デフォルトの名無しさん [sage] 2019/11/09(土) 10:00:40.69 ID:q+fGPpet どちらにせよ、小数点以下をどう扱うかは仕様で決めないとダメだな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/132
133: デフォルトの名無しさん [sage] 2019/11/14(木) 22:54:58.33 ID:cMIrVE8k ファイルハンドル($fh)からファイル名を取得する方法ってありますか? ・stat $fhでinode取得してシェルのfindで見つけるってのはコストかかるのでやりたくない。 *{$fh}{IO}辿ってIO::Fileから得られないかなって調べたんですけど分かりませんでした。 基本的にそういう思想がないってことかも知れません。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/133
134: デフォルトの名無しさん [sage] 2019/11/15(金) 00:28:22.57 ID:WAwhq9DE ムリやろ。 ファイル名のないファイルハンドルも少なくないしな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/134
135: デフォルトの名無しさん [] 2019/11/15(金) 12:49:10.35 ID:qkK0C17l ファイルハンドルからファイル名を求めるシステムコールとかもないしな。 ハードリンクされてて1つのi-nodeで複数のファイル名を持ってたらどうすんのっていう問題もある。 自分の作ったプログラムの中だけでいいならそのプログラム内だけの独自のopen,close作ってそこでファイル名を保持しとけば良いんじゃないかな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/135
136: デフォルトの名無しさん [sage] 2019/11/15(金) 22:37:17.80 ID:9LSwivmi お二方ありがとう そもそもそういう使い方をするものではないって理解しました http://mevius.5ch.net/test/read.cgi/tech/1548981877/136
137: デフォルトの名無しさん [sage] 2019/11/17(日) 00:22:07.56 ID:+/PgA3gU そもそもファイルをopenした時点で、ファイル名は自明だろ、、、 <>の場合は、今開いているファイル名は、$ARGVでアクセス出来るし、、、 while(<>){ print $ARGV if $. == 1 ; $. = 0 if eof } 他は、自分でコード書くんだからファイルリストの管理すりゃいいだけの 話だし。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/137
138: デフォルトの名無しさん [] 2019/11/17(日) 00:47:01.26 ID:7P3Fm4Oa >>137 ファイルハンドルだけもらうクラスかもよ http://mevius.5ch.net/test/read.cgi/tech/1548981877/138
139: デフォルトの名無しさん [sage] 2019/11/17(日) 01:44:18.01 ID:cO7DNsZu いや、気持ちはわかるやろ。 ファイルハンドルは、しょせんハンドルでしかないと納得するのは、事情がある程度わかってからなんだから。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/139
140: デフォルトの名無しさん [] 2019/11/17(日) 07:47:40.51 ID:bNRHw2eJ ファイルハンドルをインクリメントすると次のファイルを指すハンドルになることはあまり知られていない。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/140
141: デフォルトの名無しさん [sage] 2019/11/17(日) 12:07:49.00 ID:Ew4nGi4g >>140 それは、Perlのファイルハンドルの話か? Cのファイルポインタではなく? http://mevius.5ch.net/test/read.cgi/tech/1548981877/141
142: デフォルトの名無しさん [sage] 2019/11/18(月) 08:50:22.41 ID:4tmHvePg ActivePerl 5.22 から 5.28 にアップデートしたのだが、 次のものがなくなってしまって、とても不便になった気がする。 ・PerlEz.dll ・ppm(perlパッケージマネージャー) ・htmlドキュメント 他の2点はいいとしても、PerlEz.dllが無いと生きていけないので、 5.22 に戻した。もう一生5.22 を使い続けることになるのかな。 なぜ、こんな事をするのだろうか? http://mevius.5ch.net/test/read.cgi/tech/1548981877/142
143: デフォルトの名無しさん [sage] 2019/11/18(月) 20:45:39.28 ID:2uYwgX87 Strawberry Perl 使えよ http://mevius.5ch.net/test/read.cgi/tech/1548981877/143
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 859 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.010s