github.com/matrixorigin/matrixone@v0.7.0/cgo/external/decNumber/example2.c (about)

     1  /* ------------------------------------------------------------------ */
     2  /* Decimal Number Library Demonstration program                       */
     3  /* ------------------------------------------------------------------ */
     4  /* Copyright (c) IBM Corporation, 2001.  All rights reserved.         */
     5  /* ----------------------------------------------------------------+- */
     6  /*                                                 right margin -->|  */
     7  
     8  // example2.c -- calculate compound interest
     9  // Arguments are investment, rate (%), and years
    10  
    11  #define  DECNUMDIGITS 38           // work with up to 38 digits
    12  #include "decNumber.h"             // base number library
    13  #include <stdio.h>                 // for printf
    14  
    15  int main(int argc, char *argv[]) {
    16    int need=3;
    17    if (argc<need+1) {               // not enough words
    18      printf("Please supply %d number(s).\n", need);
    19      return 1;
    20      }
    21  
    22    { // excerpt for User's Guide starts here--------------------------|
    23    decNumber one, mtwo, hundred;                   // constants
    24    decNumber start, rate, years;                   // parameters
    25    decNumber total;                                // result
    26    decContext set;                                 // working context
    27    char string[DECNUMDIGITS+14];                   // conversion buffer
    28  
    29    decContextDefault(&set, DEC_INIT_BASE);         // initialize
    30    set.traps=0;                                    // no traps
    31    set.digits=25;                                  // precision 25
    32    decNumberFromString(&one,       "1", &set);     // set constants
    33    decNumberFromString(&mtwo,     "-2", &set);
    34    decNumberFromString(&hundred, "100", &set);
    35  
    36    decNumberFromString(&start, argv[1], &set);     // parameter words
    37    decNumberFromString(&rate,  argv[2], &set);
    38    decNumberFromString(&years, argv[3], &set);
    39  
    40    decNumberDivide(&rate, &rate, &hundred, &set);  // rate=rate/100
    41    decNumberAdd(&rate, &rate, &one, &set);         // rate=rate+1
    42    decNumberPower(&rate, &rate, &years, &set);     // rate=rate^years
    43    decNumberMultiply(&total, &rate, &start, &set); // total=rate*start
    44    decNumberRescale(&total, &total, &mtwo, &set);  // two digits please
    45  
    46    decNumberToString(&total, string);
    47    printf("%s at %s%% for %s years => %s\n",
    48           argv[1], argv[2], argv[3], string);
    49  
    50    } //---------------------------------------------------------------|
    51    return 0;
    52    } // main