- - PR -
小数点第6桁目での切り捨て
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-07-08 20:04
お世話になってます。
以下の仕様でデータを作成していますが、上手く行きません。 どなたかよい知恵がありましたら、よろしくお願いいたします。 総トータル数と個数を入力し、それを各個数分に等分します。 但し、割り切れない場合は、一番最初の値に余り分を上乗せします。 小数点6桁目まで値を求めます。 例:総トータル 1 個数 3 想定している結果 1つ目 0.333334 2つ目 0.333333 3つ目 0.333333 下記プログラムで実行すると余りが正しく出ず 計算がおかしくなります ここから----------------------------------------------------------------------- dblTotal = Cdbl(StrTotal) dblKosuu = Cdbl(StrKosuu) dblKobetusuu = Fnc_Round(Cstr(StrTotal / StrKosuu)) if index = 1 then dblBuf = Cdbl(dblKobetusuu * dblKosuu) dblBuf2 = dblTotal - dblBuf dblKobetusuu = dblKobetusuu + dblMid End if ここまで----------------------------------------------------------------------- Fnc_Round関数は自分で作成した関数で 数値型を1度String型にして 小数点第6桁目までを求め、また数値型で戻しています。 上記ですと余りが正しく求められません ログで見ると結果が以下のようになってします。 総容量 (5.55) 個数 (6) ケース毎の容量 (0.925) ケース容量×ケース数 (5.55) 余り (-8.88178419700125E-16) このため正しく上記のような想定してるデータが作成できません。 申し訳ありませんが、良い計算方法がありましたら、お教えいただけないでしょうか? | ||||
|
投稿日時: 2005-07-08 21:01
小数点以下6桁までの固定小数点演算ですね。そういう場合、スケーリングして整数で計算する方法を普通使います(6桁までなので10^6倍してすべての計算を行う)。
参考に、C#ですがコードおいときますね。
[ メッセージ編集済み 編集者: ya 編集日時 2005-07-08 21:03 ] | ||||
|
投稿日時: 2005-07-08 23:33
それか、decimal型を使う。
_________________ | ||||
|
投稿日時: 2005-07-11 14:17
ありがとうございました。
想定している結果が出せるようになりました。 |
1