怎样对 float, double 变量作 4 舍 5 入?

Highway2000 2000-09-06 10:15:00
比如 float a = 123.456789
希望精确到允许范围内的任意位该怎么作?比如 2 位小数, 3 位小数,整数等。
...全文
207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
potatopro 2000-09-07
  • 打赏
  • 举报
回复
用HIGHWAY的方法大数据时的处理:
1.先减去整数部分,处理完小数再加回去不就可以了?不过精度不能太高(可精确到lg2^32-1),否则仍然有溢出。
2.若整数部分已超过int范围,或需要更精确,可以分别将整数和小数分成(lg2^32-1)位一段一段,分别处理,我想可用递归实现。
临时想的,不知对不对。
SCUM 2000-09-07
  • 打赏
  • 举报
回复
《电脑编程技巧与维护》99年好像有一篇文章专门讲高位数计算的,我查一查,给你
寄过去。
Highway2000 2000-09-06
  • 打赏
  • 举报
回复
To wilbur:
我试了你的代码,基本可以用,但是大数据会出错,比如 123456789123.1234556 这样的,
该怎么办呢?
Wilbur 2000-09-06
  • 打赏
  • 举报
回复
首先将 a 乘上 10 的 (n) 次方(n为你要保留的小数位), 然后加上 0.5, 最后除 10 的 (n)次方. 中间利用整数和浮点数的转换.

float round(float fValue/*原始值*/, int n/*位数*/)
{
int cc = 1;
for(int i = 1; i < n + 1; ++i) {
cc *= 10;
}

fValue *= cc; /*放大*/
fValue += 0.5; /*四舍五入的计算*/

int iTmp = fValue; /*舍弃 n 位小数以后的数据*/

fValue = (float)iTmp / (float)cc; /*还原*/

return fValue;
}
Wilbur 2000-09-06
  • 打赏
  • 举报
回复
当然了, int 的取值范围是(–2147483647, 2147483647), 而 float 的范围是(1.175494351e–38F, 3.402823466e+38F)

如果你的要求比较特殊(无数位限制的计算), 最好将其转化为字符串处理.
Hank 2000-09-06
  • 打赏
  • 举报
回复
用Format()函数

13,825

社区成员

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

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