在C++中使用double类型如何获取输入时的精确小数位数?
解决方案:保留输入浮点数的原始格式输出
你的核心问题在于**double类型无法存储输入时的十进制小数位数信息**——比如15.20和15.2在double中是完全相同的二进制值,程序无法区分你输入的是哪一个;同时fixed配合setprecision会强制固定小数位数并触发四舍五入,不符合你“输入多少位就输出多少位”的需求。
要实现完全保留输入格式(包括末尾的0、所有小数位且不四舍五入),最直接的方法是将输入当作字符串读取和输出,绕过double的精度丢失和格式转换问题:
#include <iostream> #include <string> using namespace std; int main() { string input_num; cout << "Skriv in ett flyttal: "; cin >> input_num; cout << "Du skrev in flyttalet: " << input_num << endl; return 0; }
补充说明
如果后续需要对输入的数值进行计算,可以同时存储字符串和转换后的数值:
#include <iostream> #include <string> #include <sstream> using namespace std; int main() { string input_num; cout << "Skriv in ett flyttal: "; cin >> input_num; // 转换为double用于计算 double value; istringstream iss(input_num); iss >> value; // 输出原始格式 cout << "Du skrev in flyttalet: " << input_num << endl; // 示例计算输出 cout << "Dubbelt av talet är: " << value * 2 << endl; return 0; }
内容的提问来源于stack exchange,提问作者Zeptuz
相关产品推荐
相关产品推荐

