自1990年代以来,它就是how to print floating-point numbers quickly and accurately。 Scheme和Java编程语言已经实现了该算法,但是在C ++中找不到类似的东西。
本质上,我正在寻找一个满足以下测试案例的小型高效代码:
void test(double dbl, const char *expected) {
std::string actual = ...;
assert(actual == expected);
}
test(3.0, "3.0");
test(3.1, "3.1");
test(0.1, "0.1");
test(1.0 / 3.0, "0.3333333333333333"); // Or maybe one more digit?
双精度文字将转换为浮点数,该浮点数可能与文字相同或不同。然后,将浮点数转换回字符串。该字符串应尽可能短,同时代表十进制数,当将其解释为双精度字面量时,它将再次产生相同的浮点数。
How do I print a double value with full precision using cout?看起来很相关,但是接受的答案中的代码无法正确处理3.1情况。