社区
C++ 语言
帖子详情
好心人请帮忙啊!!!
gsqd
2005-03-11 08:55:44
我同学给我出了一道题,如何在C++中实现小数任意位的四舍五入,我想了很久也没想出来,希望有高人指点,讲一下大概的算法就可以了.谢谢!!!
...全文
115
12
打赏
收藏
好心人请帮忙啊!!!
我同学给我出了一道题,如何在C++中实现小数任意位的四舍五入,我想了很久也没想出来,希望有高人指点,讲一下大概的算法就可以了.谢谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fhvk
2005-03-12
打赏
举报
回复
不知可不可以用数组实现,试一下!
zengwujun
2005-03-12
打赏
举报
回复
mark
gsqd
2005-03-12
打赏
举报
回复
实在感谢好心人的帮助!楼上的朋友,其实我也考虑过这个问题,但迫于无奈(我的水平太菜了).所以希望有高手写了给我学习学习!!!
xialin168
2005-03-12
打赏
举报
回复
4.6732 = 假如是取小数点后一位的话 就是 ((float)((4.67 * 100 + 5)/10))/10.0
--------------------------------------------------------
4.6732 = 假如是取小数点后一位的话 就是 (float)(4.6732 * 1000 + 0.5)/1000.0
==>4.6732 = 假如是取小数点后一位的话 就是 (float)(4.6732 * 10 + 0.5)/10.0
不要犯小错误!
pcboyxhy
2005-03-11
打赏
举报
回复
上面那个代码有一下几个不足之处
1.不能处理大于9位,输出格式控制符处处理没有考虑大于9的情况。
2.int 型的p可能会溢出。
3.double 的精度问题。
另外一个办法就是,
把输入的数当作字符串处理,
这样可以处理"任意"(还是有一定范围限制)多位
pcboyxhy
2005-03-11
打赏
举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int foo(double number, int k)
{
int p=(int)pow( 10.0f, (float)k );
char format[]="%. lf\n";
printf("%lf %d位 -> ", number, k);
number *= p;
if(number>0)
number = (int)(number+0.5);
else
number = (int)(number-0.5);
number /= p;
format[2] =k+48;
printf(format, number);
}
int main(int argc, char *argv[])
{
double test = 1235.1234782;
double test2 = -1235.1234782;
int i;
for(i=1; i<7; ++i)
{
foo(test, i);
foo(test2, i);
}
system("PAUSE");
return 0;
}
运行结果是
1235.123478 1位 -> 1235.1
-1235.123478 1位 -> -1235.1
1235.123478 2位 -> 1235.12
-1235.123478 2位 -> -1235.12
1235.123478 3位 -> 1235.123
-1235.123478 3位 -> -1235.123
1235.123478 4位 -> 1235.1235
-1235.123478 4位 -> -1235.1235
1235.123478 5位 -> 1235.12348
-1235.123478 5位 -> -1235.12348
1235.123478 6位 -> 1235.123478
-1235.123478 6位 -> -1235.123478
请按任意键继续. . .
Dong
2005-03-11
打赏
举报
回复
4.6732 = 假如是取小数点后一位的话 就是 ((float)((4.67 * 100 + 5)/10))/10.0
--------------------------------------------------------
4.6732 = 假如是取小数点后一位的话 就是 (float)(4.6732 * 1000 + 0.5)/1000.0
这只是其中一种,但数值大的时候会溢出!因为float的存储整数的范围不比unsign int大!好象还比long小!
Salam2001
2005-03-11
打赏
举报
回复
通用公式,四舍五入到小数点后第n位(保留第n位):
double x, y;
对于正数:
y = int( x * pow( 10, n ) + 0.5 ) / pow( 10, n );
对于负数:
y = int( x * pow( 10, n ) - 0.5 ) / pow( 10, n );
pow( 10, n ) 是指10的n次方。
truewill
2005-03-11
打赏
举报
回复
-_-||
好像说反了
truewill
2005-03-11
打赏
举报
回复
先乘10的n次方,取整,再除10的n次方
Squall1009
2005-03-11
打赏
举报
回复
4.6732 = 假如是取小数点后一位的话 就是 ((float)((4.67 * 100 + 5)/10))/10.0
gdhyj
2005-03-11
打赏
举报
回复
不说我还不知道,我还以为在32位机上是一个指针是4呢,果然是1,在linux的gcc下也如此
通达信指标2
求大神
帮忙
破解下,非常感谢,一直想用,可是不会破解密码,网上的操作好多,可是都试过了打不开,希望
好心人
帮
帮忙
小区物业管理系统
小区物业管理系统,有一处错误,不会改,有
好心人
帮
帮忙
吗
卡巴斯基挖掘机3.1
卡巴挖掘机3.1支持2010KEY的下载!有意者可以下载看看! 备注:跟大家说一下,不知道是我电脑问题还是软件问题,我用的卡巴挖掘机都不能顺利...如果知道问题的解决方案的,希望哪位
好心人
能
帮忙
解决一下,不甚感激!!
Java基础知识及面试题
第一次上传资源,因为分不够用了,不知道为什么下载后评分不加积分,
好心人
帮
帮忙
吧..
查看dat文件内容
好心人
,
帮忙
查一下这个dat文件内容,我用Uedit32和txt打开都是乱码,或者教我一下这类文件如何看。我有分相送。
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章