user-0 提问: 怎么判断一个数是不是0.5的倍数？？？

回复:
user: user-1
content: 学习了，谢谢！！！！

user: user-2
content: 0.5是浮点，所以要考虑精度，比如 1.000000000000000000001 算不算0.5的倍数？

user: user-3
content: 把数字都乘上10，

user: user-4
content: 直接数据*10，先判断是否存在小数，然后判断个位是不是0和5， 楼上的各位考虑的好全面哦

user: user-5
content: 输入是字符串的话其实挺简单的，没小数点或者有小数点且小数点后只有1个5就是0.5的倍数

user: user-6
content: 引用 9 楼 GKatHere 的回复:[quote=引用 8 楼 sanredfish 的回复:] [quote=引用 7 楼 GKatHere 的回复:] 呃... 整数部分清0， 再检测是否等于0.5或0， 忘0了  乘以2之后检测小数是否接近0，这样更简单。[/quote] 直接检测 float(double)的尾数部分是否为0，或是与0.5相等（异或是否为0）， 也就是两个位测试而已。 没有比这更简单的了吧[/quote] 浮点数运算可能有误差,直接判断有可能不准确。

user: user-7
content: 乘以2 是整数，需要考虑精度问题

user: user-8
content: 楼主你的问题没说清楚啊   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; }

user: user-9
content: LZ应该指的是整数倍吧

user: user-10
content: 高精度 任何位数都可以   http://blog.csdn.net/zhagoodwell/article/details/55051301

user: user-10
content: 用字符串，可以避免double的10的-12次方的精度误差，用字符串，用户输入数字，用字符串匹配找到   .   若没有则为整数说明是0.5倍数，若有则判断最后一个字符是否为5不是5就不是0.5的倍数，晚上给你代码

user: user-11
content: 引用 11 楼 zhu339111520 的回复:任何数都是0.5的倍数，这句话有什么毛病 楼主应该是没说清楚问题

user: user-6
content: 引用 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

user: user-12
content: 任何数都是0.5的倍数，这句话有什么毛病

user: user-13
content: 倍数是啥？

user: user-13
content: 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

user: user-14
content: 引用 8 楼 sanredfish 的回复:[quote=引用 7 楼 GKatHere 的回复:] 呃... 整数部分清0， 再检测是否等于0.5或0， 忘0了  乘以2之后检测小数是否接近0，这样更简单。[/quote] 直接检测 float(double)的尾数部分是否为0，或是与0.5相等（异或是否为0）， 也就是两个位测试而已。 没有比这更简单的了吧

user: user-15
content: 首先要看数据精度， 其次，如果是0.5的倍数的话，让原始数据向左移1位，去掉整数后判断是否为0即可（0.5正好对应一个二进制位，如果是其他数字，需要进行计算才可以了。） 中心思想： （1）除数升倍至整数，然后进行整除取余运算。 （2）如果严格来说的话，0.3也是0.5的倍数，只是倍数0.6倍。从这个角度来讲，那么你这道题目就是假命题了。

user: user-16
content: 浮点数是不能精确表示的，所以这个问题实际上有个精度的问题。 对于楼主的问题,如果支持C99可以fabs(fmod(x, 0.5)) < 0.0001判断 否则可以试试 x = fabs(x); if (fabs(x*2.0 - floor(x*2.0)) < 0.0001)

user: user-6
content: 引用 7 楼 GKatHere 的回复:呃... 整数部分清0， 再检测是否等于0.5或0， 忘0了  乘以2之后检测小数是否接近0，这样更简单。