C++ 精确打印浮点数

C++ 精确打印浮点数,c++,floating-point,C++,Floating Point,自20世纪90年代以来,人们就知道了这一点。该方案和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"

自20世纪90年代以来,人们就知道了这一点。该方案和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?
双字面值转换为浮点数,浮点数可能与双字面值相同,也可能不同。然后,将浮点数转换回字符串。该字符串应尽可能短,同时表示十进制数,当解释为双精度文字时,将再次产生相同的浮点数


看起来相关,但接受答案中的代码不能正确处理3.1的情况。

实际上没有3.1这样的浮点数。如果您看到的输出不是
“3.1”
,那么您得到的是准确的结果!!你能更清楚地知道你在寻找什么样的结果吗?@LightnessRacesinOrbit我怀疑他说的是打印最短的表示法,可以返回完全相同的
double
。可能相关:在C中,有用于往返转换的
R
格式说明符。源代码可用,因此您可以@n、 m.:IEEE-754基本64位二进制浮点始终有17位有效数字。它们并不总是必要的。对于许多值,一个较短的字符串就足够了。问题要求使用最短的字符串。