我写了一个程序,使用fmt
库转换文本中的浮点值。最近我发现它的输出是不同的,具体取决于操作系统的整数。例如,使用Ubuntu 20的fmt
包零值打印为0.0
,使用Ubuntu 22的fmt
包,相同的值打印为0
。
据我所知,fmt
v7.0.0和v7.1.3之间引入了差异。这可以使用简化的程序进行演示,如下所示:
#include <iostream>
#include <fmt/format.h>
int main() {
std::cout << fmt::format( "{}", 0.0 );
}
字符串
在线演示:https://godbolt.org/z/d8W3EbGhM
我希望从Ubuntu 20和Ubuntu 22的fmt
软件包产生的数字输出完全相同(它可以是0.0
或0
,但两者都是一样的)。有没有一种方法可以通过设置fmt
或使用一些特殊的格式字符串来代替{}
,不限制输出的精度?
2条答案
按热度按时间up9lanfz1#
您可以使用
#
说明符来保留小数点(以及适当的尾随零)。例如:字符串
在两个版本上打印“0.0”(godbolt)。
关于release notes:
更改默认浮点格式,不包括
.0
,以与std::format
和std::to_chars
保持一致。可以使用#
说明符获取小数点和尾随零。plicqrtu2#
他们似乎为double类型做了一个默认的格式行为,因为它是
{:g}
,删除了所有尾随的零。字符串