★一个类型转换的问题?有点复杂

lyr311 2009-06-26 02:50:01
有一系列数据,如下形式:
16974890.40617606,4086725.47725926,1146
16973570.14449645,4086958.30351305,1147
16972883.72994449,4086837.05825281,1148
16971897.39350236,4088019.40261314,1149
16971364.31753635,4088172.62827098,1150
16970220.04424601,4087828.76652812,1151
16969684.77038935,4087356.05661786,1152
16966867.65026119,4088048.11198157,1153
16962907.69034056,4088796.67054906,1154
16962120.49998508,4088851.30164117,1155
我定义了一个结构体
typedef struct {
string xCor;
string yCor;
int index;
}dfxPoint;

我用一个string类型str_temp取出了第一列数据“16962120.49998508”
现在想将其四舍五入保留2位小数,写入到一个新字符串dfxP_tmp.xCor中,如下的语句却不能实现:
…………………………………………
float xx=atof(str_temp.c_str());
sprintf(dfxP_tmp.xCor,"%-10.2f", xx);
…………………………………………
请问这个问题应该如何解决?
...全文
107 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
x22ray 2009-06-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lyr311 的回复:]
错误提示如下:
67 D:\\mergeZone.cpp no matching function for call to `sprintf(std::string&, const char[8], float&)'
[/Quote]
这不明白着,你参数类型有问题嘛
lyr311 2009-06-27
  • 打赏
  • 举报
回复
memset(buffer,0x00,sizeof(buffer));
这句话必须要么?
要上有助于安全性?

问题已经基本解决.
我感觉这种写法很“C”呀,有更靠近C++的写法么,实在没办法,也就这种方法了。
asksgp 2009-06-26
  • 打赏
  • 举报
回复
三楼说的很对,应该这样:

char buf[100];
sprintf(buf,"%-10.2f", xx);
dfxP_tmp.xCor=(string)buf;
Meteor_Code 2009-06-26
  • 打赏
  • 举报
回复
sprintf(dfxP_tmp.xCor,"%-10.2f", xx);
sprintf函数调用错误
w0911h 2009-06-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lyr311 的回复:]
TC手册上这么写的:
float 4字节 6.4E-38 ~ 6.4E+38

double 8字节 1.7E-308 ~ 1.7E+308

long double …………………………
[/Quote]
精度不是表示范围,float肯定达不到你要的位数,虽然你的小数只要两位,但前面位数太多
lyr311 2009-06-26
  • 打赏
  • 举报
回复
TC手册上这么写的:
float 4字节 6.4E-38 ~ 6.4E+38

double 8字节 1.7E-308 ~ 1.7E+308

long double …………………………
lyr311 2009-06-26
  • 打赏
  • 举报
回复
在Windows下面float的精度好像够了吧?
我查一下
夹心饼干 2009-06-26
  • 打赏
  • 举报
回复
错误都已经说得很明显了啊,就是sprintf函数的问题,看下参数

float xx=atof(str_temp.c_str());
char buffer[20];
memset(buffer,0x00,sizeof(buffer));
sprintf(buffer,"%-10.2f", xx);
dfxP_tmp.xCor = buffer;


楼上的说得没错,红色地方的精度肯定不够啊~~
w0911h 2009-06-26
  • 打赏
  • 举报
回复
另外xx最好定义成double型,float型可能精度不够
w0911h 2009-06-26
  • 打赏
  • 举报
回复
sprintf的第一个参数应该是char*
lyr311 2009-06-26
  • 打赏
  • 举报
回复
"%-10.2f",有点问题,不够,应该写成"%-12.2f",
lyr311 2009-06-26
  • 打赏
  • 举报
回复
错误提示如下:
67 D:\\mergeZone.cpp no matching function for call to `sprintf(std::string&, const char[8], float&)'

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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