जोनाथन, hpique से समाधान, और प्रशांत सभी एक ही बग है : इसमें NSNumber
का निर्धारण निश्चित-सटीक प्रकारों (विभिन्न double
, long long
इत्यादि) में कास्टिंग शामिल है), जो टूटता है यदि मान बहुत बड़ाहै। उदाहरण के लिए, स्वीकृत उत्तर NSDecimalNumber(string: "1000000000000000.1")
पर विफल रहता है।
(विस्तार के रूप में, स्विफ्ट में) का अधिक सुरक्षित कार्यान्वयन:
extension NSNumber {
var isInteger: Bool {
var rounded = decimalValue
NSDecimalRound(&rounded, &rounded, 0, NSRoundingMode.RoundDown)
return NSDecimalNumber(decimal: rounded) == self
}
var isFraction: Bool { return !isInteger }
}
या ऑब्जेक्टिव-सी में, एक वैश्विक समारोह के रूप में:
BOOL NumberIsFraction(NSNumber *number) {
NSDecimal rounded = number.decimalValue;
NSDecimalRound(&rounded, &rounded, 0, NSRoundDown);
return ![number isEqualToNumber:
[[NSDecimalNumber alloc] initWithDecimal:rounded]];
}
स्रोत
2015-09-09 05:46:28
मुझे लगता है कि वे '! =' होना चाहिए? 'नंबर IFraction (@ (0.0f))' 'हाँ 'वापस आ जाएगा, है ना? – hypercrypt
आह, हाँ, brainfart। :) –