对Floating-Point Functions 了解的来看看

code_cold 2008-05-27 11:42:34
如何按保留小数点后指定几位修整一个float,比如

float XXfunc(float)
{
return XX;// 只保留小数点后5位
}
float f = 3254.1234;
XXfunc(f) == 3254.123; // 只保留小数点后3位
...全文
112 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuchao 2008-05-28
  • 打赏
  • 举报
回复
哦 如果要3254.1234做出来是3254.1230,XXFunc里面应该是
sprintf(toStr, "%7.3f", fNumber);
kuchao 2008-05-28
  • 打赏
  • 举报
回复
float小数点后精度是靠语言约定的。

我怀疑你可能想表达这样的想法

int XXFunc(float fNumber, char* toStr)
{
return sprintf(toStr, "%5.3f", fNumber);
}

int XXXFunc(const char* toStr, float& fNumber)
{
fNumber = atof(toStr);
return 0;
}

然后
char toStr[256];
float f1 = 3254.1234;
float ff1;
XXFunc(f1, toStr);
XXXFunc(toStr, ff1);

但是,这样ff1也只能是3254.1230
code_cold 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
float的本质决定如果你用上面函数原型绝对无法实现。如果你认为你找到了方法,那么你的判断方法一定出了问题
[/Quote]

// 只保留小数点后3位
float XXX(float f)
{
char str[256];
sprintf(str, "%.3f", f);
return atof(str);
}
arong1234 2008-05-28
  • 打赏
  • 举报
回复
float的本质决定如果你用上面函数原型绝对无法实现。如果你认为你找到了方法,那么你的判断方法一定出了问题
code_cold 2008-05-28
  • 打赏
  • 举报
回复
如何 按保留小数点后 指定几位 修整一个float,比如


float XXfunc(float)
{
return XX;// 只保留小数点后3位
}
例如
XXfunc(3254.1234) == 3254.123; // 只保留小数点后3位
XXfunc(0.123467) == 0.123; // 只保留小数点后3位
XXfunc(3856.12) == 3856.12; // 只保留小数点后3位

是有办法能实现XXfunc的,只是我的办法太笨拙了,感觉C/C++可能有这个功能
code_cold 2008-05-28
  • 打赏
  • 举报
回复
你的意思我了解了,怪我没表达清楚
其实我只是要求小数点后保留的几位有效数一致就可以了,就是说3254.1230,3254.123都可以

这当然是个办法,可效率太低了
arong1234 2008-05-27
  • 打赏
  • 举报
回复
No way. C/C++的语言中不可能精确保留5位有效数字。

65,186

社区成员

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

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