-4
我最近遇到这个代码。它会产生奇怪的结果(大约在第18位后大量的随机数字)。我试图找到sprintf的限制信息,但找不到它。我试图弄清楚答案是否正确或只是垃圾。当传递0.025(double类型),它打印出:Sprintf精度限制
0.025000000000000001387778780781445675529539585113525390625
#define MAX_NUM_STR_LEN 128
void File_WriteNumber(File *fp, double value) {
char numbuf[MAX_NUM_STR_LEN];
int sz = sprintf(numbuf, "%.100g", value);
fwrite (numbuf , sizeof(char), sz, fp);
}
https://stackoverflow.com/questions/588004/is-floating-point-math-broken – yano
你是通过'0.25'还是'0.025'? –
@MichaelAlbers oops。纠正。 – Jiminion