Tôi có một chương trình C++ chạy trên cả Windows/Linux. Trên Windows chương trình được biên dịch với Visual Studio 2012 và Linux nó được biên dịch với GCC. Khi chuyển đổi đôi thành chuỗi sử dụng sprintf Visual Studio đang sử dụng phương thức làm tròn khác với trình biên dịch GCC cho các mối quan hệ - tức là số thập phân kết thúc bằng 5.C++ Làm tròn hành vi nhất quán cho các mối quan hệ với sprintf
Trình biên dịch Visual Studio xuất hiện để thực hiện round half away from zero trong khi GCC thực hiện làm tròn.
Vòng chẵn là hành vi mong muốn.
Có thể thay đổi hành vi làm tròn được sử dụng cho chuỗi định dạng sprintf trong studio/cửa sổ trực quan không? Khi tôi cần phải làm tròn luôn hành xử nhất quán giữa hai người.
Đây là một mẫu C nhỏ chương trình ++ minh họa hành vi mô tả ở trên:
int main()
{
char buffer[100];
double x;
for (x = -0.5; x <= 10.5; x += 1.0)
{
sprintf(buffer,"%4g %.0f\n", x, x);
std::cout << buffer;
}
return 0;
}
của Windows ra. Các số được làm tròn đi từ zero:
OSX sản lượng biên soạn sử dụng Xcode. Các số được làm tròn bằng vòng thậm chí đối với các số chẵn:
OSX đầu ra:
Bạn có thể muốn xem bài viết này và nhận xét của bài viết: http://www.exploringbinary.com/inconsistent-rounding-of-printed-floating-point-numbers/ – NathanOliver
bạn luôn có thể sử dụng bản in {*} của riêng mình chức năng – technosaurus
[Làm tròn sự khác biệt trên Windows vs hệ thống dựa trên Unix trong sprintf] (http://stackoverflow.com/q/4649554/995714) –