【发布时间】:2018-03-21 09:19:10
【问题描述】:
众所周知,在使用精确数字(例如金钱)进行计算时,最好使用NSDecimalNumber 而不是基本的float 或double。然后,我们有舍入选项:
public enum RoundingMode : UInt {
case plain // Round up on a tie
case down // Always down == truncate
case up // Always up
case bankers // on a tie round so last digit is even
}
问题:
如何为此NSDecimalNumber 执行舍入 halfDown(.plain 的倒数,在平局上舍入)?
我原来的问题(你可以跳过这部分)
设置舍入选项(可以更改):Up、Down、HalfUp
我通过这个公式从var p = price exclude tax 计算var pT = price include tax:
pT = roundingWithOption(p * tax)
pT 是显示的unitPrice(必须包含税否则企业会坐牢),人们可以自定义它=>我必须计算价格不包括税,通过还原过程
p = roundingWithReverseOption(pT2 / tax)
然后我可以将这个price exclude tax 保存到服务器并取回它以备后用。我们只保存p,因为税收可能会改变,我们可以从其他地方获得税收=> 如果税收改变,pT 可能会有所不同。
save and continue 进程之前和之后的数字如果没有任何变化(四舍五入、税收......)应该是相同的。
选项为.up 和.down 时很简单,但我不知道如何处理.plain。
或者您能否提供一个更好的解决方案来根据自定义价格计算priceExcludeTax?加上折扣和数量会比较复杂,所以我先问一个简单的问题。
【问题讨论】:
-
对我来说不够清楚。您要税计算器吗?如果是,那么它很广泛。你能谈谈你面临的具体问题吗?
-
问题只是如何执行舍入
halfDown。另一个问题就像一个扩展。 -
你能举个
halfDown的例子吗?2.5 = 2.0? -
是的,您的样本是正确的。
0.5 -> 0--0.4 -> 0--0.6 -> 1 -
如果只想将值转为字符串,可以直接在
NumberFormatter上设置舍入。
标签: swift rounding nsdecimalnumber tax