ceilで問題ないと思うけど、、、
double dou=1.005;
TRACE(Round=%lf\n,ceil((dou+.005)/.01)*.01);
http://www24.cds.ne.jp/~neg/pro/piyo1/cetc/dou.html
ちょっと違った。
Roundで補正して、floorで不要桁をカットします。
<負の値の時は少し考えないといけない。
#define Round(n,r) (n>0?ceil(n/r)*r:floor(n/r)*r)
double dou=1.005;//4;//
TRACE(Round=%lf\n,floor((Round(dou,.001)+.005)/.01)*.01);
dou を変えると誤差が出ちゃいます。
1.025とか。
補正位置が悪いようだ。
こうかな???
TRACE(Round=%lf\n,floor((Round((dou+.005),.001))/.01)*.01);
こうちゃ さん まだ話が続くなら 管理人さんに「済」マークはずしてもらってください
話が終わっているなら良いのですけど
>一旦文字列にして四捨五入
「MSは切り上げ・切り捨て・四捨五入についてはIEEEの規格に則って作っています」
昔MSから、こんな回答をもらったことがありましたね
関数だけで解決しようにも解決つきませんでしたから
この方法のソース昨日見つけました、
但し VC++1.0でC覚えたての頃のもの、なのでかなり汚いですけど
いりますか?
工業系のCOBOLシステムをC言語にコンバートしてPCで動作できる
用にしたときのものです
少数以下の精度は10桁くらいは大丈夫なはずです
サイン+整数+少数 全体で18桁くらいに制限していたはずですけど
(多少のバグあるかも?)
ほしいなら載せますけど、載せられるのは早朝か深夜になります
(会社には持込していないので)
>「済」マークはずし
がこのスレッドの条件になりますけど
どこで話が終わってるか、わからないので