很菜问题:浮点数如何四舍五入,求教。

watermouse 2002-03-28 09:54:33
有一浮点数f1,用FloatToStr(f1)得到3.6557,希望它能四舍五入为3.66,如何做?
在DBGRID中浮点数字段ff也同样存在这个问题。

问题可能很菜,多谢各位指点。
...全文
125 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zygtp 2002-03-28
  • 打赏
  • 举报
回复
double Round(double Value,int P)
{
int Result=int(Value);
double Tmp=Value-Result;

if(Tmp==0)return Value;
for(int i=0;i<P;i++)Tmp*=10;
if(Value>0)
Tmp=int(Tmp+0.5);
else
Tmp=int(Tmp-0.5);

for(int i=0;i<P;i++)Tmp/=10;
return Result+Tmp;
}
勉励前行 2002-03-28
  • 打赏
  • 举报
回复
浮点数總會有這樣那樣的問題,要精確只有用整數
如"1/2" 可能結果是:0.49999999999999999999999999999999999999999,
也可能是0.5或0.5000000000000000000000000000000000000001
四舍五入后是0,是1.就難說了
double x ;
if(1/x*x == 1) 這個條件不一定成立.
對于一個給定的浮点数,其四舍五入可這樣:
double x;
AnsiString s1=FormatFloat("0.00",x+0.005);
使用Floor(double x),可取得整數部分,
floor finds the largest integer not greater than x.
Floor(-2.8) = -3
Floor(2.8) = 2
四舍五入時,要注意負數
0.1 四舍五入 = 0
-0.1 四舍五入 = 0
-0.8 四舍五入 = -1
Chimae 2002-03-28
  • 打赏
  • 举报
回复
同意cokeclassic();再类型转换
wt_sanlian 2002-03-28
  • 打赏
  • 举报
回复
float f = 89.500;
计算机中实际存储的可能是89.499999,而0.500在计算机中也可能存储的是0.49999
按照楼上的可就不能四舍五入了.
应当如这样写
float f = 89.500;
int i = (int)f;
i = i + (f-i) > 0.49 ? 1: 0;

ygd 2002-03-28
  • 打赏
  • 举报
回复
#include < math.h>







float f = 89.523;



int i = (int)floor(f + 0.5);// floor是取整函数


cokeclassic 2002-03-28
  • 打赏
  • 举报
回复
float f1=3.6557;

AnsiString s1=FormatFloat("0.00",f1);
kingcaiyao 2002-03-28
  • 打赏
  • 举报
回复
这样解决看一看,自已写一个函数,这个函数带两个参数,第一参数是数值本身,第二个参数是用户要求的带多少位小数。首先在找到要求取得小数位数的下一位,然后判断这一位是0到9里面的哪一位,以确定是四舍还是五入。

551

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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