无法使用 fmt 库在一个字符串中格式化两个浮点数

Posted

技术标签:

【中文标题】无法使用 fmt 库在一个字符串中格式化两个浮点数【英文标题】:Cannot format two floating point numbers in one string using the fmt library无法使用 fmt 库在一个字符串中格式化两个浮点数 【发布时间】:2020-03-31 09:40:22 【问题描述】:

我刚开始在我的应用程序中使用fmt 库,发现由于程序崩溃,我无法使用该库来格式化两个不同位数的浮点数。

经过一些实验,我意识到它实际上有点糟糕,因为在我用0:.0f(或0:.2f,就此而言)格式化任何浮点数之后,我无法格式化任何东西

对我来说违反直觉的代码示例:

#include <fmt\core.h>
#include <iostream>

int main()

    std::cout << fmt::format(" , \n", 3.14, 10.0); // Prints out '3.14, 10.0'
    //std::cout << fmt::format("0:.0f , \n", 3.14, 10.0); // - ERROR: fmt::v6::format_error at memory location 
    std::cout << fmt::format("0:.0f , 0:.0f\n", 3.14, 10.0); // - WRONG RESULT: Prints out '3, 3'
    std::cout << fmt::format("0:.0f , :d\n", 3.14, 10); // ERROR: fmt::v6::format_error at memory location

    //std::cout << fmt::format(":s, :s", fmt::format("0:.2f", 3.14), fmt::format(":0:.1f", 10.0)); // EVEN THIS DOESN'T WORK

    // This is the only way I found of getting the output I want:
    std::string a = fmt::format("0:.2f", 3.14);
    std::string b = fmt::format("0:.1f", 10.0);

    std::cout << fmt::format(":s, :s", a, b);

    return 0;

【问题讨论】:

':' 之前的数字用于 count 参数:0 是第一个,1,第二个...如果你没有在 ':' 之前放置任何内容然后将按顺序考虑参数。 @prog-fh 傻了我。但是,为什么我评论的最后一行失败了? 符号:0:看不懂 没关系...这是一个错字。 @prog-fh 感谢您的帮助,如果您将其作为答案,我将很乐意接受。 【参考方案1】:

: 之前的数字用于对参数进行计数。0: 是第一个,1: 是第二个... 如果您没有在 : 之前添加任何内容,则将按顺序考虑参数。 您不能在相同的格式字符串中混合一些 与一个参数计数器,而另一些则没有这样一个参数计数器。

【讨论】:

以上是关于无法使用 fmt 库在一个字符串中格式化两个浮点数的主要内容,如果未能解决你的问题,请参考以下文章

『GoLang』fmt包的使用

go语言基础之格式化输出

格式化输出(fmt包)

Python ValueError:无法将字符串转换为浮点数:

将逗号添加到浮点数或字符串?

如何解析八进制字符串作为Rust中的浮点数?