整数后面的小数点怎么去掉? 我做了一个简单的2操作数的四则运算器,运算结果在编辑框中显示,当结果为整数时,后面总是带个小数点,这个小数点是怎么来的,能去掉吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 编辑框映射的变量是什么类型的?如果CString型的,看是不是在转换时出了问题? 是CString型的_gcvt(dfresult,10,cBuffer);m_RESULT_EDIT=(LPCTSTR)cBuffer;怎样才能正确转换呢? gcvt函数把一个浮点值转换成一个字符串(包括一个小数点和可能的符号字节)并存储该字符串在buffer中应该是这里出了问题 转换没有问题。加一个去掉小数点的操作就行了。先判断小数点后是否还有东西,如果没有了,就去掉。加上这几句吧。int i=strlen(cBuffer)-1; if(cBuffer[i]=='.') cBuffer[i]=0; #include <float.h>double dbData = 12.0;TCHAR szBuffer[128] = {0};_stprintf(szBuffer, _T("%.*g"), DBL_DIG, dbData);TRACE(_T("%s\n"), szBuffer); int i=strlen(cBuffer)-1; if(cBuffer[i]=='.') cBuffer[i]=0;加了,但还是去不掉 #include <float.h>double dbData = 12.0;TCHAR szBuffer[128] = {0};_stprintf(szBuffer, _T("%.*g"), DBL_DIG, dbData);TRACE(_T("%s\n"), szBuffer); 这是什么? 怎么会呢?我的全部代码。我在VC6上试验过了。去掉了。 char buffer[100]; gcvt( 100.0, 7, buffer ); AfxMessageBox(buffer);//这里是有点的。 int i=strlen(buffer)-1; if(buffer[i]=='.') buffer[i]=0; m_abc=buffer; UpdateData(FALSE);//到了编辑框里就没有点了。你的cBuffer是不是也是CString型的? 此法正解%.*g的标准化输出。输出有效数字,把后补0去掉。简单点可以写成这个样子:m_RESULT_EDIT.Format("%g", dbData); 解决了。之前说不行是因为放错地方了。这是修改之后的代码:_gcvt(dfresult,10,cBuffer); int i=strlen(cBuffer)-1; if(cBuffer[i]=='.')cBuffer[i]=0; m_RESULT_EDIT=(LPCTSTR)cBuffer; UpdateData(FALSE) #pragma message(messagestring) 怎么实现MyODBC数据源的自动配置 创建一个窗口,如何实时知道是否被其它窗口挡住? 我的定时器怎么不工作啊? CreateWindow的问题?(有代码) 请问大家,如何检测当前的事件(EVENT)的状态是有信号还是无信号,好象没什么函数 关于组件的问题,在线等,急~~ 高分求解:使用ADO,编译连接没有错误,运行时错误“完成该操作的数据还不可用” 请教ADO的GetCollect返回 请问如何录下带音效的avi文件? mfc 双击list的一个选项弹出一个对话框,但要双击另一个选项打开先要关闭上一个对话框 jpg2avi
如果CString型的,看是不是在转换时出了问题?
_gcvt(dfresult,10,cBuffer);
m_RESULT_EDIT=(LPCTSTR)cBuffer;
怎样才能正确转换呢?
加一个去掉小数点的操作就行了。
先判断小数点后是否还有东西,如果没有了,就去掉。
加上这几句吧。int i=strlen(cBuffer)-1;
if(cBuffer[i]=='.')
cBuffer[i]=0;
TCHAR szBuffer[128] = {0};
_stprintf(szBuffer, _T("%.*g"), DBL_DIG, dbData);
TRACE(_T("%s\n"), szBuffer);
int i=strlen(cBuffer)-1;
if(cBuffer[i]=='.')
cBuffer[i]=0;加了,但还是去不掉
TCHAR szBuffer[128] = {0};
_stprintf(szBuffer, _T("%.*g"), DBL_DIG, dbData);
TRACE(_T("%s\n"), szBuffer);
这是什么?
我的全部代码。我在VC6上试验过了。去掉了。 char buffer[100];
gcvt( 100.0, 7, buffer );
AfxMessageBox(buffer);//这里是有点的。
int i=strlen(buffer)-1;
if(buffer[i]=='.')
buffer[i]=0;
m_abc=buffer;
UpdateData(FALSE);//到了编辑框里就没有点了。
你的cBuffer是不是也是CString型的?
输出有效数字,把后补0去掉。
简单点可以写成这个样子:
m_RESULT_EDIT.Format("%g", dbData);
解决了。之前说不行是因为放错地方了。这是修改之后的代码:
_gcvt(dfresult,10,cBuffer); int i=strlen(cBuffer)-1;
if(cBuffer[i]=='.')cBuffer[i]=0; m_RESULT_EDIT=(LPCTSTR)cBuffer; UpdateData(FALSE)