ubuntu 如何从不同版本的fmt库中获得相同的包含精确整数值的浮点变量输出?

qlckcl4x  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(80)

我写了一个程序,使用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.00,但两者都是一样的)。有没有一种方法可以通过设置fmt或使用一些特殊的格式字符串来代替{},不限制输出的精度?

up9lanfz

up9lanfz1#

您可以使用#说明符来保留小数点(以及适当的尾随零)。例如:

std::cout << fmt::format("{:#}", 0.0);

字符串
在两个版本上打印“0.0”(godbolt)。
关于release notes
更改默认浮点格式,不包括.0,以与std::formatstd::to_chars保持一致。可以使用#说明符获取小数点和尾随零。

plicqrtu

plicqrtu2#

他们似乎为double类型做了一个默认的格式行为,因为它是{:g},删除了所有尾随的零。

#include <fmt/format.h>
#include <iostream>

int main() {
  std::cout << fmt::format("{:g}\n", 0.0);  // outputs 0
}

字符串

相关问题