The following is a translation of the Objective-C solution to Check if NSDecimalNumber is an integer for Swift:
extension Decimal { var isWholeNumber: Bool { if isZero { return true } if !isNormal { return false } var myself = self var rounded = Decimal() NSDecimalRound(&rounded, &myself, 0, .plain) return self == rounded } } print(Decimal(string: "1234.0")!.isWholeNumber)
This works even if the mantissa is not minimal (or the indicator is not maximum), for example 100 * 10 -1 . Example:
let z = Decimal(_exponent: -1, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (100, 0, 0, 0, 0, 0, 0, 0)) print(z) // 10.0 print(z.exponent) // -1 print(z.isWholeNumber) // true
source share