如何让float(或者double)变量精确到小数点后两位

DanielLan 2011-01-23 11:18:02
比如:
float spd = 22.518744;
有哪些好方法让它变为:
spd = 22.52;
请高手指点,谢谢。
ps:计算出来的spd,经过处理后需要变为精确到小数点后两位
...全文
46556 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
loventzhen 2011-09-04
  • 打赏
  • 举报
回复
floor(x+0.5);
networkwx 2011-01-25
  • 打赏
  • 举报
回复 3
%.2f
九月 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 qq120848369 的回复:]

C/C++ code
#include <iostream>

using namespace std;

int main()
{
double spd = 22.518744;
spd=( (double)( (int)( (spd+0.005)*100 ) ) )/100;

cout<<spd<<endl;

return 0;
}


给力……
[/Quote]
顶 这个 三楼的没有考虑四舍五入 小数点最后又四舍五入 先+0.005就行了
qq120848369 2011-01-24
  • 打赏
  • 举报
回复 1
#include <iostream>

using namespace std;

int main()
{
double spd = 22.518744;
spd=( (double)( (int)( (spd+0.005)*100 ) ) )/100;

cout<<spd<<endl;

return 0;
}


给力.
赵4老师 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 daniellan 的回复:]
这个只是让它输出到小数点后两位吧??我的意思是让它值变为精确到后两位
[/Quote]
这是不可能完成的任务!

用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。
bruceteen 2011-01-24
  • 打赏
  • 举报
回复
没有办法,因为
a. 浮点数是二进制表示的,有限位时和10进制不能一一对应
b. 浮点数不是定点数,未必能精确表达10进制的小数点后两位
flysnowhite 2011-01-24
  • 打赏
  • 举报
回复
如果要精确取后两位很简单,(int)(spd*100)/100.0,再使用%.2f显示。
flysnowhite 2011-01-24
  • 打赏
  • 举报
回复
%.2f
weerweer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wizard_tiger 的回复:]

引用 6 楼 masmaster 的回复:
引用 2 楼 daniellan 的回复:
这个只是让它输出到小数点后两位吧??我的意思是让它值变为精确到后两位

2楼的有何不可吗? 【输出到小数点后两位】和【让它值变为精确到后两位】有多大区别? 愿闻其详。多谢!!!

输出后两位表示储存在变量中的数据没有改变,
而变为精确到后两位是表示变量中的数据已经改变。


三楼正解!
[/Quote]
少了位数又不省空间的。
第一次看到有愿意丢失精度的事情,
3楼++
appx 2011-01-24
  • 打赏
  • 举报
回复
//浮点数精度转换
float changeFloat(float oldFloat,int precisionLength) {
return ((int)((oldFloat-(int)oldFloat)*square(precisionLength)))/(float)square(precisionLength) + (int)oldFloat;
}
int square(int num) {
if (num <= 0) {
return 1;
} else {
return 10*square(num - 1);
}

}
gbb21 2011-01-24
  • 打赏
  • 举报
回复
float double 不行,只有 decimal 才可。
booksoon 2011-01-24
  • 打赏
  • 举报
回复
round
wizard_tiger 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 masmaster 的回复:]
引用 2 楼 daniellan 的回复:
这个只是让它输出到小数点后两位吧??我的意思是让它值变为精确到后两位

2楼的有何不可吗? 【输出到小数点后两位】和【让它值变为精确到后两位】有多大区别? 愿闻其详。多谢!!!
[/Quote]
输出后两位表示储存在变量中的数据没有改变,
而变为精确到后两位是表示变量中的数据已经改变。

三楼正解!
NowDoIT 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hqin6 的回复:]
float spd = 22.518744;
char buf[10];
sprintf(buf, "%.2f", spd);
sscanf(buf, "%f", &spd);
[/Quote]
++
漫步者、 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 qq120848369 的回复:]
C/C++ code
#include <iostream>

using namespace std;

int main()
{
double spd = 22.518744;
spd=( (double)( (int)( (spd+0.005)*100 ) ) )/100;

cout<<spd<<endl;

return 0……
[/Quote]哈哈,是的,这才是精确,3L的是保留2个小数,可能马虎了一下吧
可乐崽 2011-01-24
  • 打赏
  • 举报
回复
下面给出两个方案:

void main()
{
float spd = 22.515744;
char buf[10];
sprintf(buf, "%.2f", spd);
printf("%s\n", buf);
sscanf(buf, "%f", &spd);
printf("%.2f", spd);
}


void main()
{
float spd = 22.519744;
printf("%.2f", spd+0.005);
}
可乐崽 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 masmaster 的回复:]

引用 2 楼 daniellan 的回复:
这个只是让它输出到小数点后两位吧??我的意思是让它值变为精确到后两位

2楼的有何不可吗? 【输出到小数点后两位】和【让它值变为精确到后两位】有多大区别? 愿闻其详。多谢!!!
[/Quote]
【输出到小数点后两位】是截取式的,比如22.518就会输出: 22.51
【让它值变为精确到后两位】是四舍五入,比如22.518就会输出: 22.52
l369294289 2011-01-23
  • 打赏
  • 举报
回复
int i;
i=f*10+0.5;
f=1.0*i/10;
不知道能行不....
DanielLan 2011-01-23
  • 打赏
  • 举报
回复
唉,就是说,我只想到把它格式化为%2.f的字符串,而忘记了sscanf这个函数。。我还需要把它从字符串转回来。新手上路,库函数不熟,海涵
masmaster 2011-01-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 daniellan 的回复:]
这个只是让它输出到小数点后两位吧??我的意思是让它值变为精确到后两位
[/Quote]
2楼的有何不可吗? 【输出到小数点后两位】和【让它值变为精确到后两位】有多大区别? 愿闻其详。多谢!!!
加载更多回复(5)

70,006

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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