Changeset b5f17e1


Ignore:
Timestamp:
Jan 18, 2022, 8:49:34 PM (2 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
Children:
038a0bd
Parents:
e57de69
Message:

support locale for digit separator in floating-point numbers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/iostream.cfa

    re57de69 rb5f17e1  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 17 16:38:32 2022
    13 // Update Count     : 1349
     12// Last Modified On : Tue Jan 18 08:34:16 2022
     13// Update Count     : 1350
    1414//
    1515
     
    205205        ostype & ?|?( ostype & os, float f ) {
    206206                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    207                 PrintWithDP( os, "%g", f );
     207                PrintWithDP( os, "%'g", f );
    208208                return os;
    209209        } // ?|?
     
    214214        ostype & ?|?( ostype & os, double d ) {
    215215                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    216                 PrintWithDP( os, "%.*lg", d, DBL_DIG );
     216                PrintWithDP( os, "%'.*lg", d, DBL_DIG );
    217217                return os;
    218218        } // ?|?
     
    223223        ostype & ?|?( ostype & os, long double ld ) {
    224224                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    225                 PrintWithDP( os, "%.*Lg", ld, LDBL_DIG );
     225                PrintWithDP( os, "%'.*Lg", ld, LDBL_DIG );
    226226                return os;
    227227        } // ?|?
     
    233233                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    234234//              os | crealf( fc ) | nonl;
    235                 PrintWithDP( os, "%g", crealf( fc ) );
    236                 PrintWithDP( os, "%+g", cimagf( fc ) );
     235                PrintWithDP( os, "%'g", crealf( fc ) );
     236                PrintWithDP( os, "%'+g", cimagf( fc ) );
    237237                fmt( os, "i" );
    238238                return os;
     
    245245                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    246246//              os | creal( dc ) | nonl;
    247                 PrintWithDP( os, "%.*lg", creal( dc ), DBL_DIG );
    248                 PrintWithDP( os, "%+.*lg", cimag( dc ), DBL_DIG );
     247                PrintWithDP( os, "%'.*lg", creal( dc ), DBL_DIG );
     248                PrintWithDP( os, "%'+.*lg", cimag( dc ), DBL_DIG );
    249249                fmt( os, "i" );
    250250                return os;
     
    257257                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    258258//              os | creall( ldc ) || nonl;
    259                 PrintWithDP( os, "%.*Lg", creall( ldc ), LDBL_DIG );
    260                 PrintWithDP( os, "%+.*Lg", cimagl( ldc ), LDBL_DIG );
     259                PrintWithDP( os, "%'.*Lg", creall( ldc ), LDBL_DIG );
     260                PrintWithDP( os, "%'+.*Lg", cimagl( ldc ), LDBL_DIG );
    261261                fmt( os, "i" );
    262262                return os;
     
    693693                if ( ! f.flags.pc ) memcpy( &fmtstr, DFMTNP, sizeof(DFMTNP) ); \
    694694                else memcpy( &fmtstr, DFMTP, sizeof(DFMTP) ); \
    695                 int star = 4;                                                                   /* position before first '*' */ \
     695                int star = 5;                                                                   /* position before first '*' */ \
    696696\
    697697                /* Insert flags into spaces before '*', from right to left. */ \
     
    699699                if ( f.flags.sign ) { fmtstr[star] = '+'; star -= 1; } \
    700700                if ( f.flags.pad0 ) { fmtstr[star] = '0'; star -= 1; } \
     701                fmtstr[star] = '\''; star -= 1;                                 /* locale */ \
    701702                fmtstr[star] = '%'; \
    702703\
     
    716717} // distribution
    717718
    718 FloatingPointFMTImpl( double, "     * ", "     *.* " )
    719 FloatingPointFMTImpl( long double, "     *L ", "     *.*L " )
     719FloatingPointFMTImpl( double,      "      * ",  "      *.* " )
     720FloatingPointFMTImpl( long double, "      *L ", "      *.*L " )
    720721
    721722// *********************************** character ***********************************
Note: See TracChangeset for help on using the changeset viewer.