我希望将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相关的细节会有所帮助,请提及。其他伪代码也没问题。
感谢。
答案 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);