OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

小数の計算の精度について

  • すぐに回答を!
  • 質問No.207722
  • 閲覧数866
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 44% (8/18)

Perlでプログラムを作成しているのですが、小数の乗算を行う際に、計算が合わなくなって困っています。

例:
10000*1.005=10049

コンピューターの性質上、小数の乗算等は精度に問題があるのは分かっているのですが。
VB等では変数の型をうまく設定すれば計算出来るのですが、Perlではどのような方法でこの現象を回避できるのでしょうか。

もし、よい知恵がありましたらよろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2

 実際の数値ということですが、それはあきらかにおかしいです(^_^;
 Perl そのものが内部で破壊されているか、プログラムにバグがあるか、コンピュータ自身がバグつきペンティアムを載せているかです。
 たかだか8桁の数字で狂うことは、通常であればありえません。

 printf のところに、%d を使ってませんか?
 これは本来小数点なしの整数を表すためのものですので、単精度整数以上を扱う場合は %f を使うのが望ましいのです。
 まずはこれを確認してみてください。
お礼コメント
pco

お礼率 44% (8/18)

回答ありがとうございます。

確認したところ、計算処理後にintで整数に変換しておりました。
その部分を修正しますと計算が正確に出来るようになりました。
ありがとうございました。
投稿日時 - 2002-01-29 18:20:02
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1

 数値はただのサンプルですよね?  実際にはどのような問題が発生しているのでしょうか。  Perl では、全ての変数が内部で自動切換えで制御されているので、一度1000倍にするなりなんなりしてから計算したり、または数字の文字列を自前の計算ロジックで計算させたりといった方法をとるしかありません。  ですので、ケースによってその対処法は変わってきますので、実際の不具合をみないと、これ、といった方法は ...続きを読む
 数値はただのサンプルですよね?
 実際にはどのような問題が発生しているのでしょうか。
 Perl では、全ての変数が内部で自動切換えで制御されているので、一度1000倍にするなりなんなりしてから計算したり、または数字の文字列を自前の計算ロジックで計算させたりといった方法をとるしかありません。

 ですので、ケースによってその対処法は変わってきますので、実際の不具合をみないと、これ、といった方法はないのです。
 また、Perl はたしか倍制度整数までちゃんとサポートしていたはずなので、サンプルに記載された程度の数値を扱っているレベルであれば、心配は無意味です。
補足コメント
pco

お礼率 44% (8/18)

例の数値は実際の数値です。

状況的には

単価(整数8ケタ)×数量(整数部5ケタ、小数部3ケタ)=金額(整数9ケタ)

という計算になります。

やはり、処理的には文字列で計算を行うのが一番よい方法ということになるのでしょうか。
投稿日時 - 2002-01-29 14:48:04


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ