如何用C中的逗号格式化货币?

时间:2012-07-27 20:01:34

标签: c formatting

我希望将Long Float格式化为C中的货币。我想在开头放置一个美元符号,逗号迭代在十进制之前的每三位数,并在十进制之前的一个点。到目前为止,我一直在打印这样的数字:

printf("You are owed $%.2Lf!\n", money);

返回类似

的内容

You are owed $123456789.00!

数字应该看起来像这样

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

任何答案都不需要在实际代码中。你没有勺子喂食。如果有与c相关的细节会有所帮助,请提及。其他伪代码也没问题。

感谢。

3 个答案:

答案 0 :(得分:10)

您的printf可能已经可以使用'标记自行执行此操作。但是,您可能需要设置区域设置。这是我机器上的一个例子:

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

int main(void)
{
    setlocale(LC_NUMERIC, "");
    printf("$%'.2Lf\n", 123456789.00L);
    printf("$%'.2Lf\n", 1234.56L);
    printf("$%'.2Lf\n", 123.45L);
    return 0;
}

运行它:

> make example
clang -Wall -Wextra -Werror    example.c   -o example
> ./example 
$123,456,789.00
$1,234.56
$123.45

这个程序的运行方式与我在Mac(10.6.8)和Linux机器(Ubuntu 10.10)上的运行方式相同。

答案 1 :(得分:2)

我知道这是一条很古老的文章,但是今天我在 .active { transform: scale(1.1); } 兔子洞里消失了,所以我想记录下我的旅行记录:

man中可以包含一个名为strfmon()的函数,该函数可以根据本地或国际标准来执行此操作。

请注意,它的工作方式类似于monetary.h,并且将使用与字符串中指定的printf()格式一样多的double自变量。

除了我在这里拥有的以外,还有很多其他东西,我发现此页面最有帮助:https://www.gnu.org/software/libc/manual/html_node/Formatting-Numbers.html

%
#include <monetary.h>
#include <locale.h>
#include <stdlib.h>
#include <stdio.h>

int main(){
    // need to setlocal(), "" sets locale to the system locale
    setlocale(LC_ALL, "");

    double money_amt = 1234.5678;

    int buf_len = 600;
    char * money_string = malloc(buf_len);

    strfmon(money_string, buf_len-1,
            "Simple, local:                  %n\n"\
            "International:                  %i\n"\
            "parenthesis for negatives:      %(n\n"\
            "fixed width (6 digits):         %#6n\n"\
            "fill character '*':             %=*#6n\n"\
            "-- note fill characters don't\n"\
            "-- count where the thousdands\n"\
            "-- separator would go:\n"\
            "filling with 9 characters:      %=*#9n\n"\
            "Suppress thousands separators:  %^=*#9n\n",
            money_amt, money_amt, money_amt * -1,
            money_amt, money_amt, money_amt, money_amt);

    printf( "===================== Output ===================\n"\
            "%s"\
            "================================================\n",
            money_string);

    free(money_string);
    return 0;
}

答案 2 :(得分:0)

我认为没有C函数可以做到这一点,但你可以自己写吗?说float price = 23234.45。首先用逗号打印(int)price,打印小数点;然后对于小数部分,执行printf("%d", (int)(price*100)%100);