double转cstring如何不显示0?

sideking 2010-02-06 11:16:05
CString str;
str.Format(_T("%f"),123.22);
默认会显示123.220000


123 -> 123.00000


如何去掉0?

...全文
1180 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
huziwu 2010-02-10
  • 打赏
  • 举报
回复
double a=123.012000;
CString str;
if(a==(int)a)//小数点后为0
{
str.Format(_T("%.0f"),a);
}
else
{
str.Format("%f",123.0000);
str.TrimRight("0");
}
MessageBox(str);
muzizongheng 2010-02-10
  • 打赏
  • 举报
回复
str.Format(_T("%g"),123.22000); AfxMessageBox(str);

sideking 2010-02-10
  • 打赏
  • 举报
回复
引用 24 楼 joephia 的回复:
终极答案
CString str;
str.Format("%f",123.0000);
MessageBox(str);
str.TrimRight(".0");
MessageBox(str);


rt


str.Format("%f",123); //这样就不行了
Joephia 2010-02-07
  • 打赏
  • 举报
回复
终极答案
CString str;
str.Format("%f",123.0000);
MessageBox(str);
str.TrimRight(".0");
MessageBox(str);


rt
ActiveFrank 2010-02-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhou1xp 的回复:]
str.Format(_T("%0.2f"),123.22); 控制它的小数位数
[/Quote]
这个
jianghandaxue 2010-02-07
  • 打赏
  • 举报
回复
是这样

CString str;
str.Format(_T("%.2f"),123.22);
悟迟 2010-02-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 radiohead001 的回复:]
str.Format(_T("%.0f"), 123.22);
[/Quote]这个ok
yhp1888 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lmxmx 的回复:]
如果可以提前知道精确度,就可以使用1楼的方法

如果不确定,就只好在转换后对string进行处理,从右向左去掉‘0’。

^^
[/Quote]

没错,就用这个方法
sideking 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zoulie 的回复:]
强制转换int也可以
[/Quote]
123.23 的话 就没23了

我就想保留 原来的数字包括小数 不加零即可
sideking 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lmxmx 的回复:]
如果可以提前知道精确度,就可以使用1楼的方法

如果不确定,就只好在转换后对string进行处理,从右向左去掉‘0’。

^^
[/Quote]

如果是 123.00000

去掉零 还得去掉 点.....

123.23 估计就变 12323了
sideking 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 radiohead001 的回复:]
str.Format(_T("%.0f"), 123.22);
[/Quote]

这样的话 变 123了

我想不改变原来的小数 就是不加零即可
lmxmx 2010-02-06
  • 打赏
  • 举报
回复
没有,

至少我本人没见过,大多是 sprintf() 或 CString.Format().

lmxmx 2010-02-06
  • 打赏
  • 举报
回复
如果可以提前知道精确度,就可以使用1楼的方法

如果不确定,就只好在转换后对string进行处理,从右向左去掉‘0’。

^^
lmxmx 2010-02-06
  • 打赏
  • 举报
回复
简单代码:

char str[] = "123.000";
int len = strlen(str);

while('0'==str[len])
{
if('.'==str[len-1])
{
break;
}
else
{
str[len] = '\0';
}
len--;
}
sideking 2010-02-06
  • 打赏
  • 举报
回复
只能用去右边零的方法吗?
lmxmx 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sideking 的回复:]
引用 4 楼 lmxmx 的回复:
如果可以提前知道精确度,就可以使用1楼的方法
如果不确定,就只好在转换后对string进行处理,从右向左去掉‘0’。


如果是 123.00000
去掉零  还得去掉  点.....
123.23  估计就变 12323了
[/Quote]

如果想 从右向左 依次去掉'0'

可以每次判断两个字符,例如:
字符串 szABC[]=123.000 , 我们想规范为 123.0

1. 比 szABC[N] 是否为'0'

2. 如果是'0',再比较 szABC[N-1] 是否为 '.'
如果不是'0',退出

3. 如果是'.',保留szABC[N]为'0',退出
如果不是'.',说明不是有效位,删掉即可

4. 返回第一步,再次循环,直到退出

^^ 看问题要放开思想,从右向左并不是一次只能判断一个字符。

从左向右其实也可以,用于数组中只有一个小数点,
所以可以先找到小数点,在判断小数部分是否为零,
如果为零,保留一个'0'
如果不为零,删除全部的'0'

^^
zoulie 2010-02-06
  • 打赏
  • 举报
回复
强制转换int也可以
radiohead001 2010-02-06
  • 打赏
  • 举报
回复
...
%.2f
radiohead001 2010-02-06
  • 打赏
  • 举报
回复
str.Format(_T("%.0f"), 123.22);
jxk122481 2010-02-06
  • 打赏
  • 举报
回复
try stringstream...

double dVal = 123.22;
stringstream ss;
ss<<dVal;
string sVal;
ss>>sVal;


good luck.
加载更多回复(7)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧