浮点数乘法

b_bang 2008-04-08 03:25:35
我用cbc做了个简单的计算器程序 遇到浮点数运算的问题
比如说1.05*1.2得到的结果是1.25999999046326
那怎么样才能得到1.26呢
望各位大虾指点一二
...全文
416 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
过客猫2022 2008-04-10
  • 打赏
  • 举报
回复
使用Round函数!因为有些数,十进制正常,但二进制的时候,会除不尽,就会出现楼主所说的情况。
ydlchina 2008-04-08
  • 打赏
  • 举报
回复

double a = 1.05;
double b = 1.2;
Edit1->Text = FloatToStr(a*b);//结果是1.26呀
b_bang 2008-04-08
  • 打赏
  • 举报
回复
为什么double可以 而float不行呢

麻烦 能说一下如何做异常处理吗?
比如说a/b当b=0时会抛出异常
但是为什么每次都是vcl先抛出异常
如何展示我所想抛出的异常及处理

谢谢指教
yhe888 2008-04-08
  • 打赏
  • 举报
回复
你首先需考虑浮点数的存储方式,再考虑算法。如果要得到精确结果,需用数据来存储,还得用程序模拟笔算乘法。具体可参照圆周率的计算程序。
erdgzw 2008-04-08
  • 打赏
  • 举报
回复
FormMain->EditRes->Text=FormatFloat("0.00",result);
ydlchina 2008-04-08
  • 打赏
  • 举报
回复

double a,b;
a= StrToFloat(EditOp1->Text);
b= StrToFloat(EditOp2->Text);
double result;
b_bang 2008-04-08
  • 打赏
  • 举报
回复
我的代码是这样的
void __fastcall TFormMain::ButtonClick(TObject *Sender)
{
float a,b;
a=StrToFloat(FormMain->EditOp1->Text);
b=StrToFloat(FormMain->EditOp2->Text);
float result;
switch(((TButton*)Sender)->Tag)
{
case 1:
......
case 2:
......
case 3:
FormMain->LabelSymbol->Caption="*";
result=a * b;
break ;
case 4:
FormMain->LabelSymbol->Caption="/";
result=a / b;
break ;
}
FormMain->EditRes->Text=FloatToStr(result);
}
结果确实不是笔算的那样

另外如果做异常处理的话该怎么做
为什么每次都先显示vcl自己的异常处理
谢谢
erdgzw 2008-04-08
  • 打赏
  • 举报
回复
可以用FormatFloat

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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