0

Swift の NSDecimalNumber に小数コンポーネント (0 以外) があるかどうかを判断したいユースケースがあります。小数部分を切り捨てることはできますが、それには新しい NSDecimalNumber を作成する必要があり、可能であればそれを避けたいと考えています。

私は計算されたプロパティでこれを行っているので、できるだけ効率的にしたいと考えています。これは現在、私の拡張機能が遊び場でどのように見えるかです:

extension NSDecimalNumber {
    func decimalNumberRoundedToDigits(withDecimals: UInt8, roundingMode: NSRoundingMode = NSRoundingMode.RoundPlain) -> NSDecimalNumber
    {
        // round to required decimals
        let disp = decimalNumberByRoundingAccordingToBehavior(NSDecimalNumberHandler(roundingMode: roundingMode, scale: Int16(withDecimals), raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false));

        return disp;
    }

    //  Convert the least significant byte into a signed 8-bit integer
    // Currently just truncates the fractional portion - I would like
    // to test it instead and only round if there are decimals.
    var safeByteValue: Int8 {
        get {
            let bits = UInt8(decimalNumberRoundedToDigits(0).longLongValue & 0xFF);

            return Int8(bitPattern: bits);
        }
    };
}

// just a test loop for demonstration
for i in 0...256
{
    print(NSDecimalNumber(unsignedInt: UInt32(bitPattern: Int32(i))).safeByteValue);
}
4

1 に答える 1