如何在C中用逗号输入货币?

时间:2019-02-22 23:11:08

标签: c formatting

我正在为C中的货币设置双精度或长双精度的格式。我想在美元的开头放置一个美元符号,如果需要,可以使用负数,在小数点前的第三个数字处进行逗号迭代,并在小数点前使用一个点。到目前为止,我一直在打印这样的数字:

printf("Please enter an amount: $%.2Lf\n", money);

哪个返回类似

Please enter an amount: $123456789.00

数字应该看起来像这样...

$123,456,789.00
$1,234.56
$123.45

我需要它才能使用任何数字。如果答案是实际的代码,将会有所帮助,因为我是编码领域的新手(大学里的新人),但是我知道这似乎是简单的出路,因此,如果有人想向我解释它并逐步引导我,我将不胜感激那也是。这个问题是我之前在此网站上有人问的,但我需要一些认真的帮助。

谢谢!

1 个答案:

答案 0 :(得分:3)

也许此代码段可以为您提供帮助。它使用语言环境来实现您的目的。

#include <stdio.h>
#include <locale.h>

int main()
{
    long double money;
    setlocale(LC_NUMERIC, "en_US.UTF-8"); // Use thousands separators

    printf("How much? ");
    scanf("%Lf", &money);
    printf("Formatted: $%'.2Lf\n", money); // Notice the ' character
}

语言环境几乎听起来像。它们处理 local 标准,例如默认的时间格式。当您使用setlocal时,将发送一个类别和一个 locale 作为参数。这些类别是:

  • LC_ALL选择整个C语言环境
  • LC_COLLATE选择C语言环境的排序规则类别
  • LC_CTYPE选择C语言环境的字符分类类别
  • LC_MONETARY选择C语言环境的货币格式类别
  • LC_NUMERIC选择C语言环境的数字格式类别
  • LC_TIME选择C语言环境的时间格式类别

有许多不同的语言环境。 en_US.UTF-8是其中之一。

https://en.cppreference.com/w/c/locale/LC_categories