【发布时间】:2017-09-10 11:50:08
【问题描述】:
我有这三个数字:
double n1 = 1.1
double n2 = 1.10
double n3 = 1.101
我希望将它们转换为字符串以分隔小数部分以在其他地方使用它们。因此,我想要以下内容:
string s1 = 1
string s2 = 10
string s3 = 101
我读到使用std::to_string 是不可能的,因为它总是返回所有小数,例如s3 类似于 101000。
然后我尝试了以下方法:
double n3 = 1.101;
std::ostringstream strs;
strs << n3;
std::string str = strs.str();
boost::char_separator<char> sep(".");
boost::tokenizer<boost::char_separator<char>> tokens(str,sep);
for (const auto& t : tokens) {
EV << "separated parts " << t << endl;
}
这在n1 和n3 情况下工作正常,但是当我使用n2 时,它返回1 而不是10。
我正在考虑如何解决这个问题,唯一的事情是在转换为字符串之前计算精度,然后再次设置精度。
这是一个可行的策略吗? 如何计算点后的位数?
【问题讨论】:
-
1.1 == 1.10,没有区别。 -
简单的初等数学,小数部分末尾有多少个零并不重要。所以,1.1 == 1.10,还有 1.10 == 1.100000000000000000...
-
为什么不使用
std::modf()? -
我知道,但这是给我的代码。
1.1的含义与1.10不同。如果输入的是1.1我希望能够和1.10区分开来 -
@brid 为什么最初需要双精度值?
标签: c++ string type-conversion double precision