C
printf
、sprintf
,数值转字符串
%.5f ,单精度小数点后5位
%.15f ,双精度小数点后15位
sscanf
,字符串转数值
%f,单精度
%lf,双精度
详细的精度说明见std::printf, std::fprintf, std::sprintf, std::snprintf
C++
只要是继承自istream\ostream的都遵循一样的规则,需要通过std::setprecision
修改精度,默认按照有效数字6位
double pi = 3.14159265358979323846;
std::cout << pi; //3.14159
std::cout << std::setprecision(16) << pi; //3.141592653589793
同理,std::fstream也是一样。
而std::to_string(double)
是输出6位有效数字的,要非常小心。参照std::to_string其本质是sprintf(buf, "%Lf", value)
,而sprintf对于%lf没有指定精度时是按照默认6位有效数字