Tôi đang đọc từ một tệp JSON sử dụng jsoncpp. Khi tôi viết lại tập tin, các giá trị float của tôi hơi lệch. Để kiểm tra, tôi quyết định phân tích cú pháp tệp thành giá trị Json :: Value và sau đó viết giá trị đó trở lại tệp. Tôi hy vọng nó trông giống nhau, nhưng thay vào đó các giá trị float khác nhau.Jsoncpp viết các giá trị float không chính xác
Ví dụ:
"Parameters":
{
"MinXValue": 0.1,
"MaxXValue": 0.15,
"MinYValue": 0.25,
"MaxYValue": 1.1,
"MinObjectSizeValue": 1
}
viết như:
"Parameters":
{
"MinXValue": 0.10000000000000001,
"MaxXValue": 0.14999999999999999,
"MinYValue": 0.25,
"MaxYValue": 1.1000000238418579,
"MinObjectSizeValue": 1
}
Bạn có thể nhận thấy rằng 0,25 không thay đổi, mặc dù tất cả các phao nổi khác đã làm. Bất kỳ ý tưởng gì đang xảy ra ở đây?
Một số giá trị điểm động có thể được biểu diễn chính xác theo dạng nhị phân và một số giá trị không thể. Những gì bạn đang thấy là đại diện gần nhất về giá trị của bạn. –
Số dấu chấm động không chính xác. Họ là những đại diện tốt nhất trong bộ nhớ hạn chế. PS 0,25 là một phần tư - triệu tập để làm với làm việc trong nhị phân ;-) –
Cảm ơn bạn đã làm rõ. Có cách nào để tránh điều này? – SFBA26