怎么判断一个数是不是0.5的倍数???

Lumi555 2017-02-08 04:10:55
如题,想用c程序编写代码判断
...全文
3710 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean龍 2018-12-08
  • 打赏
  • 举报
回复
学习了,谢谢!!!!
英雄@末路 2018-12-07
  • 打赏
  • 举报
回复
0.5是浮点,所以要考虑精度,比如 1.000000000000000000001 算不算0.5的倍数?
Mike宋 2018-12-07
  • 打赏
  • 举报
回复
把数字都乘上10,
CT8100 2018-12-07
  • 打赏
  • 举报
回复

直接数据*10,先判断是否存在小数,然后判断个位是不是0和5,
楼上的各位考虑的好全面哦
636f6c696e 2018-12-06
  • 打赏
  • 举报
回复
输入是字符串的话其实挺简单的,没小数点或者有小数点且小数点后只有1个5就是0.5的倍数
sanredfish 2018-12-06
  • 打赏
  • 举报
回复
引用 9 楼 GKatHere 的回复:
[quote=引用 8 楼 sanredfish 的回复:]
[quote=引用 7 楼 GKatHere 的回复:]
呃...
整数部分清0, 再检测是否等于0.5或0, 忘0了


乘以2之后检测小数是否接近0,这样更简单。[/quote]
直接检测 float(double)的尾数部分是否为0,或是与0.5相等(异或是否为0),
也就是两个位测试而已。
没有比这更简单的了吧[/quote]
浮点数运算可能有误差,直接判断有可能不准确。
AlbertS 2018-12-06
  • 打赏
  • 举报
回复
乘以2 是整数,需要考虑精度问题
MG_Sir 2017-02-15
  • 打赏
  • 举报
回复
楼主你的问题没说清楚啊 0.5不管是哪个阿拉伯数字都是它倍数啊 是不是想问怎么判断输入一个整数是不是五的整数倍数 #include <stdio.h> int main() { int x; scanf("%d",&x); if(x%5==0) printf("%d是5的整数倍数\n",x); else printf("%d不是5的整数倍数",x); return 0; }
自信男孩 2017-02-13
  • 打赏
  • 举报
回复
LZ应该指的是整数倍吧
zhagoodwell 2017-02-13
  • 打赏
  • 举报
回复
高精度 任何位数都可以 http://blog.csdn.net/zhagoodwell/article/details/55051301
zhagoodwell 2017-02-13
  • 打赏
  • 举报
回复
用字符串,可以避免double的10的-12次方的精度误差,用字符串,用户输入数字,用字符串匹配找到 . 若没有则为整数说明是0.5倍数,若有则判断最后一个字符是否为5不是5就不是0.5的倍数,晚上给你代码
ck2333 2017-02-10
  • 打赏
  • 举报
回复
引用 11 楼 zhu339111520 的回复:
任何数都是0.5的倍数,这句话有什么毛病
楼主应该是没说清楚问题
sanredfish 2017-02-10
  • 打赏
  • 举报
回复
引用 9 楼 GKatHere 的回复:
[quote=引用 8 楼 sanredfish 的回复:] [quote=引用 7 楼 GKatHere 的回复:] 呃... 整数部分清0, 再检测是否等于0.5或0, 忘0了
乘以2之后检测小数是否接近0,这样更简单。[/quote] 直接检测 float(double)的尾数部分是否为0,或是与0.5相等(异或是否为0), 也就是两个位测试而已。 没有比这更简单的了吧[/quote] float不建议直接和0比较,在一些条件下可能不成立;比如:
	float a ;
	float b = 1;
	
	a = 1.0/3.0;

	b -= a;
	b -= a;
	b -= a;

	printf("%f,%f\n",a,b);
	if(b !=0)
	{
		printf("b != 0\n");
	}
输出是

0.333333,-0.000000
b != 0
FD_2013 2017-02-10
  • 打赏
  • 举报
回复
任何数都是0.5的倍数,这句话有什么毛病
赵4老师 2017-02-10
  • 打赏
  • 举报
回复
倍数是啥?
赵4老师 2017-02-09
  • 打赏
  • 举报
回复
fmod Calculates the floating-point remainder. double fmod( double x, double y ); Function Required Header Compatibility fmod <math.h> ANSI, Win 95, Win NT For additional compatibility information, see Compatibility in the Introduction. Libraries LIBC.LIB Single thread static library, retail version LIBCMT.LIB Multithread static library, retail version MSVCRT.LIB Import library for MSVCRT.DLL, retail version Return Value fmod returns the floating-point remainder of x / y. If the value of y is 0.0, fmod returns a quiet NaN. For information about representation of a quiet NaN by the printf family, see printf. Parameters x, y Floating-point values Remarks The fmod function calculates the floating-point remainder f of x / y such that x = i * y + f, where i is an integer, f has the same sign as x, and the absolute value of f is less than the absolute value of y. Example /* FMOD.C: This program displays a * floating-point remainder. */ #include <math.h> #include <stdio.h> void main( void ) { double w = -10.0, x = 3.0, y = 0.0, z; z = fmod( x, y ); printf( "The remainder of %.2f / %.2f is %f\n", w, x, z ); printf( "The remainder of %.2f / %.2f is %f\n", x, y, z ); } Output The remainder of -10.00 / 3.00 is -1.000000 Floating-Point Support Routines See Also ceil, fabs, floor
GKatHere 2017-02-09
  • 打赏
  • 举报
回复
引用 8 楼 sanredfish 的回复:
[quote=引用 7 楼 GKatHere 的回复:] 呃... 整数部分清0, 再检测是否等于0.5或0, 忘0了
乘以2之后检测小数是否接近0,这样更简单。[/quote] 直接检测 float(double)的尾数部分是否为0,或是与0.5相等(异或是否为0), 也就是两个位测试而已。 没有比这更简单的了吧
kakabulusi 2017-02-09
  • 打赏
  • 举报
回复
首先要看数据精度, 其次,如果是0.5的倍数的话,让原始数据向左移1位,去掉整数后判断是否为0即可(0.5正好对应一个二进制位,如果是其他数字,需要进行计算才可以了。) 中心思想: (1)除数升倍至整数,然后进行整除取余运算。 (2)如果严格来说的话,0.3也是0.5的倍数,只是倍数0.6倍。从这个角度来讲,那么你这道题目就是假命题了。
mymtom 2017-02-09
  • 打赏
  • 举报
回复
浮点数是不能精确表示的,所以这个问题实际上有个精度的问题。 对于楼主的问题,如果支持C99可以fabs(fmod(x, 0.5)) < 0.0001判断 否则可以试试 x = fabs(x); if (fabs(x*2.0 - floor(x*2.0)) < 0.0001)
sanredfish 2017-02-09
  • 打赏
  • 举报
回复
引用 7 楼 GKatHere 的回复:
呃... 整数部分清0, 再检测是否等于0.5或0, 忘0了
乘以2之后检测小数是否接近0,这样更简单。
加载更多回复(4)

70,006

社区成员

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

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