四捨五入の方法 – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] 四捨五入の方法

固定ページ 2 / 2

NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 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


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 ちょっと違った。
 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);


返信引用
EIJI
 EIJI
(@EIJI)
ゲスト
結合: 24年前
投稿: 76
 

dou を変えると誤差が出ちゃいます。
1.025とか。


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 補正位置が悪いようだ。
 こうかな???
TRACE(Round=%lf\n,floor((Round((dou+.005),.001))/.01)*.01);


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

こうちゃ さん まだ話が続くなら 管理人さんに「済」マークはずしてもらってください
話が終わっているなら良いのですけど

>一旦文字列にして四捨五入
「MSは切り上げ・切り捨て・四捨五入についてはIEEEの規格に則って作っています」
昔MSから、こんな回答をもらったことがありましたね
関数だけで解決しようにも解決つきませんでしたから

この方法のソース昨日見つけました、
但し VC++1.0でC覚えたての頃のもの、なのでかなり汚いですけど
いりますか?

工業系のCOBOLシステムをC言語にコンバートしてPCで動作できる
用にしたときのものです

少数以下の精度は10桁くらいは大丈夫なはずです
サイン+整数+少数 全体で18桁くらいに制限していたはずですけど
(多少のバグあるかも?)

ほしいなら載せますけど、載せられるのは早朝か深夜になります
(会社には持込していないので)

>「済」マークはずし
がこのスレッドの条件になりますけど
どこで話が終わってるか、わからないので


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました