Tôi có vấn đề về hệ thống dựa trên UNIX sprintf không làm tròn giá trị đúng.Sự khác biệt làm tròn trên Windows và hệ thống dựa trên Unix trong sprintf
Ví dụ
double tmp = 88888888888885.875
char out[512];
Thats 88,888,888,888,885.875 chỉ để được dễ dàng hơn trên mắt. Tôi đưa ra ví dụ cụ thể và lớn như vậy bởi vì có vẻ như nó hoạt động tốt trên các số nhỏ hơn.
Tôi cố gắng để sử dụng nó trong sau cách
sprintf(out, "%021.2f", tmp);
printf("out = %s\n", tmp);
Trên cửa sổ kết quả này trong:
out = 000088888888888885.88
On ví dụ AIX, nhưng cho thấy trong Linux cũng như:
out = 000088888888888885.87
Tại sao điều này xảy ra? Bất kỳ ý tưởng và làm thế nào để làm cho nó cư xử tương tự cách trên Win/Unix
Cảm ơn
erm, http://www.ideone.com/UVtft báo cáo '.88', SuseLinux cục bộ của tôi báo cáo tương tự ... – Nim
Bạn đang sử dụng CPU nào cho mỗi hệ điều hành? – chrisaycock
Trên Linux (Debian 5) AMD64 Tôi nhận được '000088888888888885.88' –