UNIXベースのシステムで問題があります。sprintfは正しく値を切り上げません。 88,888,888,888,885.875ザッツWindowsとsprintfのUnixベースのシステムでの丸めの違い
例えばdouble tmp = 88888888888885.875
char out[512];
ちょうど目に容易になります。 小さな数字でうまくいくように見えるので、私はそのような具体的で大きな例を挙げています。 Windows上で
私は、次の方法でそれを使用しようとしています
sprintf(out, "%021.2f", tmp);
printf("out = %s\n", tmp);
これは、その結果:例えばAIX上で
out = 000088888888888885.88
が、同様にLinuxでのショー:
out = 000088888888888885.87
なぜこれが起こっていますか? 任意のアイデアとどのようにそれが勝利/ Unix上で使用すると、精度の限界、意味を持つdouble
を使用しているためだ
おかげ
erm、http://www.ideone.com/UVtftは '.88'を報告します。私のローカルSuseLinuxは同じことを報告しています... – Nim
各OSにはどのようなCPUを使用していますか? – chrisaycock
Linux(Debian 5)AMD64で '000088888888888885.88'を取得しました –