【问题标题】:How can I put in currency with commas in C?如何在 C 中用逗号输入货币?
【发布时间】:2019-02-22 23:11:08
【问题描述】:

我正在寻找在 C 语言中为货币格式化双精度或长双精度。我想在开头放置一个美元符号,如果需要,放置一个负数,逗号在小数点前每第三个数字迭代,小数点前一个点.到目前为止,我一直在打印这样的数字:

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

返回类似的东西

Please enter an amount: $123456789.00

数字应该是这样的......

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

我需要它来处理任何数字。如果答案是实际代码会有所帮助,因为我在编码方面相对较新(大学新生),但我知道这似乎是简单的出路,所以如果有人愿意向我解释并引导我完成,我将不胜感激那个也是。这个问题是我之前在这个网站上提出的,但我需要一些认真的帮助。

谢谢!

【问题讨论】:

  • money 是什么类型?是long double吗?
  • 这是一个难题。大致上,money 应该是 double,但我会为任何严肃的程序使用库。
  • 我会将money 转换为字符串,然后手动在逗号前每三个字符插入,。我看不到使用printf 的简单(可靠)方法。
  • 它可以是双精度或长双精度。我们的教授希望我们远离花车,因为这些是我们已经学到的东西。

标签: c formatting


【解决方案1】:

也许这段代码 sn-p 会帮助你。它为您的目的使用语言环境。

#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 时,您发送一个 category 和一个 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

【讨论】:

  • 用 12345 为我写 Formatted: $12 345,00,所以空格必须用 ',' 和 ',' 替换为 '.' (我在法国)
  • 您介意向我解释一下 locale 在这种情况下的作用吗,我从来没有被教过它是做什么的?
  • setlocale(LC_NUMERIC, ""); --> 不完全是。 "" 非常依赖于语言环境。 (“” for locale 指定特定于语言环境的本地环境)
  • @chux 已修复。谢谢。
  • @DinoSalihovic 现在添加了一些解释,但完整的解释超出了对这个问题的回答范围。 :)
猜你喜欢
  • 2012-07-26
  • 2018-03-29
  • 1970-01-01
  • 2019-07-11
  • 2022-01-07
  • 2020-12-03
  • 1970-01-01
  • 2019-02-20
  • 2014-08-01
相关资源
最近更新 更多