NSNumber+Category.m 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // NSNumber+Category.m
  3. // 乐销
  4. //
  5. // Created by mengxi on 17/3/11.
  6. // Copyright © 2017年 ping. All rights reserved.
  7. //
  8. #import "NSNumber+Category.h"
  9. @implementation NSNumber (Category)
  10. +(NSNumber *)exchangeStr:(NSString *)str{
  11. if (isStr(str)) {
  12. if ([str doubleValue]) {
  13. return [NSDecimalNumber numberWithDouble:[str doubleValue]];
  14. }
  15. }
  16. return @0;
  17. }
  18. + (NSNumber * (^)(NSString *))str{
  19. return ^(NSString *str){
  20. if (isStr(str)) {
  21. if ([str doubleValue]) {
  22. return [NSDecimalNumber numberWithDouble:[str doubleValue]];
  23. }
  24. }
  25. return @0;
  26. };
  27. }
  28. + (NSNumber *(^)(double))dou{
  29. return ^(double num){
  30. return [NSDecimalNumber numberWithDouble:num];
  31. };
  32. }
  33. + (double (^)(NSNumber *))douValue{
  34. return ^(NSNumber * num){
  35. if (isNum(num)) {
  36. return [num doubleValue];
  37. }
  38. return 0.;
  39. };
  40. }
  41. + (NSNumber *)numberWithString:(NSString *)string {
  42. NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
  43. NSString *str = [[string stringByTrimmingCharactersInSet:set] lowercaseString];
  44. if (!str || !str.length) {
  45. return nil;
  46. }
  47. static NSDictionary *dic;
  48. static dispatch_once_t onceToken;
  49. dispatch_once(&onceToken, ^{
  50. dic = @{@"true" : @(YES),
  51. @"yes" : @(YES),
  52. @"false" : @(NO),
  53. @"no" : @(NO),
  54. @"nil" : [NSNull null],
  55. @"null" : [NSNull null],
  56. @"<null>" : [NSNull null]};
  57. });
  58. id num = dic[str];
  59. if (num) {
  60. if (num == [NSNull null]) return nil;
  61. return num;
  62. }
  63. // hex number
  64. int sign = 0;
  65. if ([str hasPrefix:@"0x"]) sign = 1;
  66. else if ([str hasPrefix:@"-0x"]) sign = -1;
  67. if (sign != 0) {
  68. NSScanner *scan = [NSScanner scannerWithString:str];
  69. unsigned num = -1;
  70. BOOL suc = [scan scanHexInt:&num];
  71. if (suc)
  72. return [NSNumber numberWithLong:((long)num * sign)];
  73. else
  74. return nil;
  75. }
  76. // normal number
  77. NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
  78. [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
  79. return [formatter numberFromString:string];
  80. }
  81. @end