A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 棉/mg花/x糖 于 2015-3-5 14:52 编辑

急求解决:iOS关于判断两个浮点数整除的解决办法!!!

  1. /**
  2. *  判断两个浮点数是否整除
  3. *
  4. *  @param firstNumber  第一个浮点数(被除数)
  5. *  @param secondNumber 第二个浮点数(除数,不能为0)
  6. *
  7. *  @return 返回值可判定是否整除
  8. */
  9. - (BOOL)judgeDivisibleWithFirstNumber:(CGFloat)firstNumber andSecondNumber:(CGFloat)secondNumber
  10. {
  11.     // 默认记录为整除
  12.     BOOL isDivisible = YES;
  13.    
  14.     if (secondNumber == 0) {
  15.         return NO;
  16.     }
  17.    
  18.     YBLog(@"firstNumber = %f", firstNumber);
  19.     YBLog(@"secondNumber = %f", secondNumber);
  20.    
  21.     CGFloat result = firstNumber / secondNumber;
  22.    
  23.     YBLog(@"result = %f", result);

  24.     // NSString * resultStr = @"10062.0038";
  25.     NSString * resultStr = [NSString stringWithFormat:@"%f", result];
  26.     YBLog(@"resultStr = %@", resultStr);
  27.    
  28.     NSRange range = [resultStr rangeOfString:@"."];
  29.    
  30.     NSString * subStr = [resultStr substringFromIndex:range.location + 1];
  31.    
  32.     YBLog(@"subStr = %@", subStr);
  33.     YBLog(@"subStr的长度 = %zd", subStr.length);
  34.    
  35.     for (NSInteger index = 0; index < subStr.length; index ++) {
  36.         unichar ch = [subStr characterAtIndex:index];
  37.         
  38.         // 后面的字符中只要有一个不为0,就可判定不能整除,跳出循环
  39.         if ('0' != ch) {
  40.             YBLog(@"不能整除");
  41.             isDivisible = NO;
  42.             break;
  43.         }
  44.         YBLog(@"ch = %d", ch);
  45.     }
  46.    
  47.     // YBLog(@"可以整除");
  48.     return isDivisible;
  49. }
复制代码
输入1.49,0.01,结果如下:
  1. 2015-03-05 14:46:01.787 [2306:130962] firstNumber = 1.490000
  2. 2015-03-05 14:46:01.787 [2306:130962] secondNumber = 0.010000
  3. 2015-03-05 14:46:01.787 [2306:130962] result = 149.000004
  4. 2015-03-05 14:46:01.788 [2306:130962] resultStr = 149.000004
  5. 2015-03-05 14:46:01.788 [2306:130962] subStr = 000004
  6. 2015-03-05 14:46:01.788 [2306:130962] subStr的长度 = 6
  7. 2015-03-05 14:46:01.788 [2306:130962] ch = 48
  8. 2015-03-05 14:46:01.788 [2306:130962] ch = 48
  9. 2015-03-05 14:46:01.789 [2306:130962] ch = 48
  10. 2015-03-05 14:46:01.789 [2306:130962] ch = 48
  11. 2015-03-05 14:46:01.789 [2306:130962] ch = 48
  12. 2015-03-05 14:46:01.789 [2306:130962] 不能整除
复制代码



急求,大神出来帮忙解决一下这个问题。明明能整出,为什么打印不能整除。

3 个回复

倒序浏览
怎么能够解决这个误差问题???
回复 使用道具 举报
这个是不能解决的,浮点数有误差是存储原理的问题,除非你用另一种方法解决,比如转化成整数!
回复 使用道具 举报
passchaos 发表于 2015-3-5 14:56
这个是不能解决的,浮点数有误差是存储原理的问题,除非你用另一种方法解决,比如转化成整数! ...

只能整成整数吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马