如何在C ++中格式化数字?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C ++中格式化数字?相关的知识,希望对你有一定的参考价值。

我想用#。###。### type在C ++中格式化我的输出。例如:我有一个名为num = 123456789的int数字现在我想将它格式化为123.456.789作为我的输出。我怎么能用C ++做到这一点?谢谢你的帮助

例1:输入:

int a = 12345

预期产量:

a = 12.345

例2:输入:

int a = 123456

预期产量:

a = 123.456

例3:输入:

int a = 1234567

预期产量:

a = 1.234.567
答案

您通常通过在打印之前设置正确的区域设置来完成此操作。大多数情况下,“正确”的语言环境不是您(程序员)选择的语言环境,而是用户选择的语言环境。为此,您使用没有名称的区域设置:

#include <iostream>
#include <vector>

int main()  
    std::cout.imbue(std::locale(""));

    std::vector<int> values  123456789, 12345, 123456, 1234567 ;

    for (auto v : values)
        std::cout << v << "\n";

在我的机器上(配置为英语/美国语言环境),这会产生如下输出:

123,456,789
12,345
123,456
1,234,567

如果您的机器配置为使用.而不是,作为千位分隔符的区域设置,那就是您应该得到的。如果您需要确保无论用户的意愿如何都能得到它(请三思,但......),您可以通过明确指定区域设置来实现。例如,如果我使用:std::cout.imbue(std::locale("DE"));,我得到的输出就像你要求的那样:

123.456.789
12.345
123.456
1.234.567

有关可用语言环境以及要使用的名称的信息,请参阅编译器的文档。

以上是关于如何在C ++中格式化数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HSQLDB 中格式化数字 - printf() 等效项

如何设置数字格式以显示C ++中的所有十进制数字? [关闭]

如何在 decimal.ToString() 中传递两种不同的数字格式 [重复]

如何在 Excel 上将“dd:hh:mm:ss”格式转换为数字类型?

如何在EXCEL中把两列表格里的数字合成一列并且中间用逗号隔开?

如何在 R 向量中的新后缀后重置数字序列