c++ libfmt和语言环境问题:对准不正确

hk8txs48  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(145)

我试着用合适的数字分隔符来格式化一些浮点数。在下面的例子中,最后一行输出的格式不正确(它向左移了一位)。
程序:

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

int main()
{
    double value1{5.50};
    double value2{10.50};

    std::cout << fmt::format("{:6.2f} €", value1) << std::endl; // OK
    std::cout << fmt::format("{:6.2f} €", value2) << std::endl; // OK

    std::locale myLocale("de_DE.UTF-8");
    std::cout << fmt::format(myLocale, "{:6.2Lf} €", value1) << std::endl; // OK
    std::cout << fmt::format(myLocale, "{:6.2Lf} €  <- !!!", value2) << std::endl; // !!!
}

输出:

5.50 €
 10.50 €
  5,50 €
10,50 €  <- !!!

为什么?我做错什么了吗?

eeq64g8w

eeq64g8w1#

我是这么做的

  • 我构建了{fmt} 9.1.0并与您的程序链接。我能够重现与您相同的问题。
  • 我构建了{fmt} Backbone.js (当前为050293646fc0337cfdb5084bf16f3d6efc84e9d8)并链接到您的程序。问题没有出现。

结论:我怀疑9.1.0有一个bug,在以后的版本中没有出现。我建议基于我使用的提交或以后的提交来重建{fmt}

相关问题