Tôi đã tự hỏi nếu có một cách khắc phục một vấn đề chính xác điều đó dường như là kết quả của đại diện bên trong máy tính của tôi các số dấu chấm động:Đối phó với các vấn đề chính xác trong số dấu chấm động
Vì lợi ích của rõ ràng các vấn đề được tóm tắt như sau:
// str is "4.600"; atof(str) is 4.5999999999999996
double mw = atof(str)
// The variables used in the columns calculation below are:
//
// mw = 4.5999999999999996
// p = 0.2
// g = 0.2
// h = 1 (integer)
int columns = (int) ((mw - (h * 11 * p))/((h * 11 * p) + g)) + 1;
Trước khi đúc thành một số nguyên gõ kết quả của các cột tính toán là 1,9999999999999996; gần đến mức xa so với kết quả mong muốn là 2.0.
Mọi đề xuất được chào đón nhiều nhất.
câu hỏi này đã được hỏi và trả lời trước ... chỉ cần tìm kiếm nó ... –
Đọc trên Phân tích số, đó là một vấn đề lớn trong các tình huống nhất định. Có thể sử dụng các thư viện toán học thay thế (nhưng chậm hơn) như BigDecimal, vv ... – JeeBee