C++如何去除浮点数字符串后面的零 double转CString消除后面的0

作者: admin 分类: C++ 发布时间: 2020-09-08 23:24

double a = 5.0;

CString str;

str.Format(_T("%.2f"),a);

返回的是“5.00"

如果不想要后面的0,希望结果为"5",对于5.0100,上面返回的是“5.01”

方法1(推荐)

str.Format(_T("%g"),a);

对于5.00,返回结果为“5”,不过此方法也有缺陷,5.010100返回的是“5.0101”,也就是没有小数位数的控制了

可以先str.Format(_T("%.2f"),a);

再double a = _tstof(str);

然后再str.Format(_T("%g"),a);


方法2

使用STL提供的ostringstream很容易解决这个问题,也更自然。新的实现如下: 

double num=32.0100; 

std::ostringstream oss; 

oss<<num; 

std::cout<<oss.str()<<std::endl;


其它方法

C++默认是不输出浮点数小数bai点后多余的0的。如果想du要输出小数点后多余zhi的0,则要在程序中用cout.setf(ios::showpoint);语句设置dao,不再想输出时要用cout.unsetf(ios::showpoint);语句恢复。以下代码供理解这个变化过程:

//#include "stdafx.h"//If the vc++6.0, with this line.

#include <iostream>

using namespace std;

int main(void){

    double h=5.7000;

    cout << "默认不输出小数点后的0\n" << h << endl;

    cout.setf(ios::showpoint);//设置输出小数点后多余的0

    cout << h << endl;

    cout.unsetf(ios::showpoint);//恢复默认设置,即不再输出多余的0

    cout << h << endl;

    return 0;

}

输出是:

默认不输出小数点后的0

5.7

5.700000

5.7

CString CC;

dounle m;

CC.Format("%f",m);

CC.TrimRight("0");

CC.TrimRight(".");


如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

标签云