fmtmoney.c

来自「国外网站上的一些精典的C程序」· C语言 代码 · 共 124 行

C
124
字号
/***  FMTMONEY.C - Format a U.S. dollar value into a numeric string****  public domain demo by Bob Stout*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include "snipmath.h"#define Form(s,a) bufptr += sprintf(bufptr, s, a)static char buf[256], *bufptr;static char *units[] = {"Zero", "One", "Two", "Three", "Four",                        "Five", "Six", "Seven", "Eight", "Nine",                        "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen",                        "Fifteen", "Sixteen", "Seventeen", "Eighteen",                        "Nineteen"},            *tens[]  = {"Twenty", "Thirty", "Forty", "Fifty", "Sixty",                        "Seventy", "Eighty", "Ninety"};static void form_group(int, char *);/***  Call with double amount**  Rounds cents**  Returns string in a static buffer*/char *fmt_money(double amt){      int temp;      double dummy, cents = modf(amt, &dummy);      *buf = '\0';      bufptr = buf;      temp = (int)(amt/1E12);      if (temp)      {            form_group(temp, "Trillion");            amt = fmod(amt, 1E12);      }      temp = (int)(amt/1E9);      if (temp)      {            form_group(temp, "Billion");            amt = fmod(amt, 1E9);      }      temp = (int)(amt/1E6);      if (temp)      {            form_group(temp, "Million");            amt = fmod(amt, 1E6);      }      temp = (int)(amt/1E3);      if (temp)      {            form_group(temp, "Thousand");            amt = fmod(amt, 1E3);      }      form_group((int)amt, "");      if (buf == bufptr)            Form("%s ", units[0]);      temp = (int)(cents * 100. + .5);      sprintf(bufptr, "& %02d/100", temp);      return buf;}/***  Process each thousands group*/static void form_group(int amt, char *scale){      if (buf != bufptr)            *bufptr++ = ' ';      if (100 <= amt)      {            Form("%s Hundred ", units[amt/100]);            amt %= 100;      }      if (20 <= amt)      {            Form("%s", tens[(amt - 20)/10]);            if (0 != (amt %= 10))            {                  Form("-%s ", units[amt]);            }                else    Form("%s", " ");      }      else if (amt)      {            Form("%s ", units[amt]);      }      Form("%s", scale);}#ifdef TESTmain(int argc, char *argv[]){      while (--argc)      {            double amt = atof(*(++argv));            printf("fmt_money(%g) = %s\n", amt, fmt_money(amt));      }      return EXIT_SUCCESS;}#endif /* TEST */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?