tausendertrennzeichen bei int



  • hi leute

    gibt es eine moeglichkeit das ich bei nem ostream bei der ausgabe eines ints das tausendertrennzeichen unterdruecken kann ?
    ich will nicht immer zwischen dem C locale und dem deutschen hin und her springen.
    das ist muehselig und fehlertraechtig.

    Meep Meep



  • Hallo Meep Meep,

    die Trennzeichen vor dem Dezimaltrenner kontrolliert man mit der Facette std::numpunct<>.

    Beispiel:

    #include <iostream>
    #include <locale>
    
    template< typename E >
    class NoGrouping : public std::numpunct< E >
    {
    protected:
        std::string do_grouping() const override
        {
            return std::string();   // leerer String heißt keine Trenner vor dem Dezimalpunkt
        }
    };
    
    int main()
    {
        using namespace std;
        // .. so steckt man die Facette in einen ostream
        cout.imbue( locale( cout.getloc(), new NoGrouping< char > ) );
        cout << (13*400) << endl;
    
        // --   so holt man die Facette wieder raus
        auto const& np = use_facet< numpunct< char > >( cout.getloc() );
        auto grouping = np.grouping();
    
        return 0;
    }
    

    Gruß
    Werner


Log in to reply