• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            力為的技術(shù)博客

            聯(lián)系 聚合 管理
              154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks

             

            默認(rèn)情況下,用科學(xué)計(jì)數(shù)法表示實(shí)數(shù),輸出的指數(shù)位數(shù)為3。如何控制使其只輸出2位指數(shù)位?VC6下如何?VC2005又如何?

            在VC2005下,運(yùn)行庫提供一個(gè)函數(shù)_set_output_format可以控制printf輸出的實(shí)數(shù)的指數(shù)位,要輸

            出2位指數(shù)位需要這樣設(shè)置:
            unsigned int  old_exponent_format = _set_output_format(_TWO_DIGIT_EXPONENT);
            使用完恢復(fù)原來設(shè)置:
            _set_output_format(old_exponent_format);

            在VC6中沒有此函數(shù),相同功能的函數(shù)我也沒有發(fā)現(xiàn)。
            在C++標(biāo)準(zhǔn)庫中的stream中,我也沒有找到這樣的格式控制符。為了在VC6下完成此功能,最后只能

            選擇曲線救國的道路了——?jiǎng)h除一個(gè)0。

            1、對于printf這樣的輸出解決方法:

            void EraseZeroPlus(std::string& str, string::size_type pos)
            {
                
            string::size_type  pos1= str.find("E+", pos);

                
            if(pos1 == string::npos)
                    
            return;
                
                pos1 
            +=2;
                str.erase(pos1, 
            1);

                EraseZeroPlus(str, pos1);
            }

            void EraseZeroMinus(std::string& str, string::size_type pos)
            {
                
            string::size_type  pos1= str.find("E-", pos);

                
            if(pos1 == string::npos)
                    
            return;
                
                pos1 
            +=2;
                str.erase(pos1, 
            1);

                EraseZeroMinus(str, pos1);
            }


            void EraseZero(char* szBuf, FILE* pFile)
            {
                
            string str(szBuf);
                EraseZeroPlus(str, 
            0);
                EraseZeroMinus(str, 
            0);
                fputs(str.c_str(), pFile);
            }

             

            2、對于stream這樣的輸出解決方法:
            這里只是考慮輸出文件的情況。
            .h file

            template<class _E, class _Tr = std::char_traits<_E> >
            class my_ofstream  : public std::basic_ofstream<_E, _Tr>
            {
            public:
                my_ofstream()
            {m_nPrecision = 5}
                
            explicit my_ofstream(const char *_S,
                    ios_base::openmode _M 
            = out | trunc) 
                    : std::basic_ofstream
            <_E, _Tr>(_S, _M)
                
            {
                    m_nPrecision 
            = 5;
                }

                
            void set_precision(int nPre)
                
            {
                    m_nPrecision 
            = nPre;
                }

                
            int get_precision(void)
                
            {
                    
            return m_nPrecision;
                }

                
            virtual ~my_ofstream(){}
            private:
                
            int m_nPrecision;
            }
            ;

            typedef my_ofstream
            <char> myofstream;

            // overload operator for double and float value    
            myofstream& operator<< (myofstream& strm, float value);
            myofstream
            & operator<< (myofstream& strm, double value);

            .cpp file:
            void erase_one_zero(std::string& str)
            {
                
            using namespace std;
                
            string::size_type  pos= str.length() - 3;
                str.erase(pos, 
            1);
            }

            myofstream
            & operator<< (myofstream& strm, const float value)
            {
                
            using namespace std;
                
                ostringstream oss;
                oss 
            << scientific << showpoint << setprecision(strm.get_precision()) << value;
                std::
            string str(oss.str());
                erase_one_zero(str);
                
                strm 
            << str;
                
                
            return strm;
            }


            myofstream
            & operator<< (myofstream& strm,  const double value)
            {
                
            using namespace std;
                
                ostringstream oss;
                oss 
            << scientific << showpoint << setprecision(strm.get_precision()) << value;
                std::
            string str(oss.str());
                erase_one_zero(str);
                
                strm 
            << str;
                
                
            return strm;
            }

            test code:
            int main(int argc, char* argv[])
            {
                
            using namespace std;

                myofstream fout(
            "out.txt");
                fout 
            << "out put scientific format: \n";
                fout 
            << 3654.002 << endl;
                fout 
            << 0.145f << endl;

                fout.set_precision(
            6);
                fout 
            << 3654.002 << endl;
                fout 
            << 0.145f << endl;    

                
            return 0;
            }

            VC6下,不知還有沒有更好的辦法……
            posted on 2005-12-18 20:39 力為 閱讀(5863) 評論(0)  編輯 收藏 引用 所屬分類: 4. C++ FAQ
            亚洲欧美国产日韩综合久久| 日韩AV无码久久一区二区| 9191精品国产免费久久| 久久er国产精品免费观看8| 欧美粉嫩小泬久久久久久久 | 久久综合久久综合亚洲| 久久99精品国产麻豆宅宅| 久久91精品国产91久久麻豆| 国产2021久久精品| 人妻精品久久无码专区精东影业| 大伊人青草狠狠久久| 久久精品视频一| 久久99热这里只有精品国产| 久久精品人成免费| 久久只有这里有精品4| 国产成人精品久久| 丰满少妇人妻久久久久久| 午夜精品久久久久9999高清| 久久精品国产亚洲麻豆| 久久久国产精品亚洲一区| 国产精品成人久久久| 三级韩国一区久久二区综合| 日韩精品国产自在久久现线拍| 少妇久久久久久久久久| 久久精品成人欧美大片| 一本色综合久久| 四虎久久影院| 亚洲欧美精品一区久久中文字幕| 国产精品99久久久久久董美香| 国产精品久久国产精麻豆99网站| 97精品依人久久久大香线蕉97| 亚洲国产成人精品91久久久 | 久久久久久精品免费看SSS| 国产精品久久久久乳精品爆| 狠狠色丁香久久综合婷婷| 久久久中文字幕| 久久本道综合久久伊人| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 欧美黑人激情性久久| 国内精品久久久人妻中文字幕| 久久久久亚洲Av无码专|