1)double d = 1.234567899;
将此数字转换为包含8个小数位的字符串,不会截断。
因此,预期输出为“1.23456789”,截断最后9位。
和
2)if d = 1.2345699;
因此,解决方案不应附加0到小数点后8位。预期输出“1.2345699”。
我尝试了很多解决方案,最后得到了stringstream c ++类。第二个问题已经解决,但第一个问题仍然存在。
有没有办法实现输出?
提前致谢。
答案 0 :(得分:2)
如果要截断部分字符串表示而不进行舍入,则需要手动执行:
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <limits>
int main()
{
std::stringstream s;
double d = 1.234567899;
// print it into sstream using maximum precision
s << std::fixed << std::setprecision(std::numeric_limits<double>::digits10) << 1.234567899;
std::string res = s.str();
// Now the res contains something like 1.234567899000000
// so truncate 9000000000 by hand
size_t dotIndex = res.find(".");
std::string final_res = res.substr(0, dotIndex + 9);
std::cout << final_res << std::endl;
return 0;
}
答案 1 :(得分:0)
您是否可以通过首次将双倍的地板服务到所需的小数? 如果是这样,请查看http://www.cplusplus.com/forum/beginner/3600/
答案 2 :(得分:0)
完全按照您的意愿截断:
sprintf(str, "%1.10f", d);
memset(str+10, 0x00, 1);