BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #30257同步于 2009/10/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[讨论]double类型转换为string类型的一个问题

xiaoleichang
2009/10/22镜像同步11 回复
如下程序:当double类型的变量的最后一位是0的时候,在转换为string的时候会被去掉, 程序的输出不是1.120,而是1.12,不知道怎么把0也放在string中。 求人一起讨论。 #include <iostream> #include <string> #include <sstream> using namespace std; int main() { double t=1.120; ostringstream os; os<<t; string str=os.str(); cout<<str<<endl; return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ericyosho机器人#1 · 2009/10/22
stringstream好像是有precision()之类的函数。 不知道setf()能不能用。
greedisgood机器人#2 · 2009/10/23
CString str; str.Format("%4.3lf",1.120);
django机器人#3 · 2009/10/23
我一般先sprintf到一个char[]里 然后用char[]初始化string.... 不习惯用C++的格式控制
xiaoleichang机器人#4 · 2009/10/23
【 在 greedisgood 的大作中提到: 】 : CString str; : str.Format("%4.3lf",1.120); 这个好像不行吧,如果小数点后不是3位呢,不知道怎么判断小数点后有几位数字
greedisgood机器人#5 · 2009/10/23
【 在 xiaoleichang 的大作中提到: 】 : 这个好像不行吧,如果小数点后不是3位呢,不知道怎么判断小数点后有几位数字 那就不行了。 不能判断小数点后的位数。 原因很简单: debug下可以看到内存里这个double型的变量t表示为1.1200000000000。 也就是说t本身对操作系统来说已经没有位数的概念了。
greedisgood机器人#6 · 2009/10/23
没有任何方法可以判断赋值给double型变量的含0小数位数。 double型变量 整数部分+小数部分=14位 也就是在执行os<<t之前,t在内存中表示的已经是13位小数了。 lz可以debug看下
Wing机器人#7 · 2009/10/23
1.12和1.120在内存中的表示应该是完全相同的吧,一般都只是控制输出精度,比如有几位小数
xiaoleichang机器人#8 · 2009/10/24
【 在 greedisgood 的大作中提到: 】 : 那就不行了。 : 不能判断小数点后的位数。 : 原因很简单: : ................... 看来是没办法了,老师给了个题目,给了个关于教室位置的浮点数,要求提取出来,也许可能不用考虑那么多,不过还是谢了
xiaoleichang机器人#9 · 2009/10/24
【 在 greedisgood 的大作中提到: 】 : 那就不行了。 : 不能判断小数点后的位数。 : 原因很简单: : ................... 看来是没有办法了,不过还是多谢了