将 NSDecimalNumbers 转换为负数

Posted

技术标签:

【中文标题】将 NSDecimalNumbers 转换为负数【英文标题】:Convert NSDecimalNumbers to Negative 【发布时间】:2015-04-15 08:13:09 【问题描述】:

快速开发预算应用程序。

本质上,有一个标签显示键盘文本输入到currencyStyle并显示这个数字(5.00美元),然后等待用户选择借记或取款。如果借记,数字会附加到表中,但是在提款(-)方面我迷路了。

我愿意

    将格式化为货币的 NSDecimalNumber 转换为负数以附加到 tableView:字符串($5.00 到 -$5.00)。

    将 NSDecimalNumber 值转换为负数并添加到 NSNumber 数组中,该数组存储要为可用余额(5.50 到 -5.50)计算的数字

对于这两者,我都尝试在 Apple 文档中使用 NSNumberFormatternegativePrefix 和其他一些属性,但无济于事。甚至尝试创建负 NSNumber 值 = -100.0,但应用程序在除法期间崩溃。

任何帮助将不胜感激。

【问题讨论】:

看看这个问题:***.com/questions/5057939/… decimalNumberWithMantissa 在 Swift 中是否有效?在 Xcode 或 Apple Swift 文档中找不到它... 您需要在 Swift 中像这样初始化 -1 NSDecimalNumberNSDecimalNumber(mantissa: 1, exponent: 0, isNegative: true) 有道理!谢谢! 【参考方案1】:

要轻松否定NSDecimalNumber,请在 Swift 中创建一个扩展,如下所示:

extension NSDecimalNumber 
    func negative() -> NSDecimalNumber 
        return self.decimalNumberByMultiplyingBy(NSDecimalNumber(mantissa: 1, exponent: 0, isNegative: true));
    

然后你可以像这样否定你的NSDecimalNumber

yourNumber = yourNumber.negative() 

【讨论】:

谢谢!完美运行!【参考方案2】:

您可以覆盖- 运算符。例如:

prefix func -(number: NSDecimalNumber) -> NSDecimalNumber 
    return number.decimalNumberByMultiplyingBy(NSDecimalNumber(mantissa: 1, exponent: 0, isNegative: true))

然后你可以像这样使用它:

let number = NSDecimalNumber(double: 5.00)
let negativeNumber = -number

【讨论】:

太棒了!没想过简单地修改-操作符!【参考方案3】:

你也可以从零中减去它自己的值并返回它,如下所示:

extension NSDecimalNumber 
    var negative: NSDecimalNumber  NSDecimalNumber.zero.subtracting(self) 


NSDecimalNumber(value: 15.6).negative  // -15.6

【讨论】:

以上是关于将 NSDecimalNumbers 转换为负数的主要内容,如果未能解决你的问题,请参考以下文章

从 NSDecimalNumber 中删除负号 (-) 给我一个错误

为啥java在改变基数之前将数字转换为负数

为啥有符号负数转换为无符号数?

为啥减去 NSDecimalNumbers 不起作用 - Swift 3

504. 十进制转换为7进制(考虑负数的情况)Base 7

让基数/计数排序与负数一起工作