令我惊讶的是,我没有找到以变量的原始形式将 float / double 写入字符串的功能:
float val = 0.012345678900000;
std::string strval;
snprintf(&strval[0], strval.capacity(), "%g", val);
printf("%s\n", strval.data());
输出“0.01234567”,但应该是“0.012345678900000”。stringstream
尝试过 - 相同的结果。std::to_string
一般来说,点后面写6个字符。精度事先不知道,您需要将您拥有的内容卸载到字符串中,您可以在末尾不加零。
怎么做?
结论:
在任何情况下,由于浮点数表示为 2 的幂的和,因此不必期望输入的字符串文字或计算结果等于特定值。
尝试
或者
只是不要写到任何地方,就像你的例子一样......
更新
对于评论中提到的“神器”。这些不是人工制品。想象一下,我们只能写入 4 位。例如,您如何将 1/5 表示为 1/2 n形式的分数之和?
1/8 + 1/16 + 1/128……停下!我们再也无法想象 1/128 - 精度还不够。所以数字 0.20 看起来像 0.1875。
这是视图本身的限制。嗯,一般来说,用 1/2 n ...形式的分数的有限和来表示分数是不可能的。