gpt4 book ai didi

c++ - 为什么 fmt 将 0.5 舍入为 0,小数点为零?

转载 作者:行者123 更新时间:2023-12-04 07:49:23 27 4
gpt4 key购买 nike

我在我的项目中完全实现了 fmt 库。但我发现的最后一个错误是之前的值四舍五入到上限 (0.5 -> 1),而目前它们四舍五入到下限 (0.5 -> 0)。
在试图找到原因时,我发现:

double halfd = 0.5;
std::string str = fmt::format("{:.0f}", halfd ); // result: "0"

float halff = 0.5f
std::string str = fmt::format("{:.0f}", halff ); // result: "0"
我也试过,如果编译器可能将 0.5 存储为 0.49999999999...,但我找不到原因。
我使用带有 v140 编译器的 Microsoft Visual Studio 2017。
有谁知道为什么 fmt 将 0.5 舍入到 0,而不是 1。我以前使用过标准 printf 库。

最佳答案

如评论 this github issue {fmt} 使用 round to nearest even mode这是 IEEE 754 中的默认舍入模式。glibc 的 printf默认情况下也是如此:https://godbolt.org/z/jfor1cedo .

关于c++ - 为什么 fmt 将 0.5 舍入为 0,小数点为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67054264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com