C++ không phải là ngôn ngữ của tôi để tha thứ cho vấn đề đơn giản này. Tôi đang mất chính xác trong một chuyển đổi atof từ chuỗi để tăng gấp đôi, bất cứ ai có thể giúp đỡ?Chuỗi C++ để nhân đôi chuyển đổi mất chính xác?
string lAmount;
string lSuspendedInt = "131663.51";
string lAccruedInterest = "0.0";
double dSuspendedInt= atof(lSuspendedInt.c_str()); //PROBLEM HERE?
double dAccruedInterest = atof(lAccruedInterest.c_str());
double dTotal = dSuspendedInt + dAccruedInterest;
char cAmount[50];
memset(cAmount,0X00,sizeof(cAmount));
sprintf(cAmount,"%g*",dTotal);
lAmount = cAmount;
cout << "lAmount: "<<lAmount<<endl; //PRINTING: 131664 not 131663.51
Tôi đã chơi với% f trong hàm memset tuy nhiên điều này mang đến cho 131663,510000
Cảm ơn trước.
Sapatos
Nếu tôi cần chính xác số tiền này, tôi sẽ xem xét sử dụng điểm cố định để thay thế. Về phía C + +, tôi chắc chắn có những cách tốt hơn để chuyển đổi chuỗi để tăng gấp đôi bên cạnh atof. sprintf() là một cách khác để thực hiện nó nếu bạn nghĩ rằng vấn đề là có. Như một bình luận như tôi không có câu trả lời chính xác ở đây cho bạn. –
@Michael: người ta có thể sử dụng luồng, mặc dù nó cồng kềnh, C++ 0x giới thiệu các hướng dẫn cụ thể 'stof' (và cả gia đình) như là một phần của Thư viện chuẩn. –