在NSDecimalNumber索引处查找数字

时间:2017-12-02 18:56:10

标签: ios swift rounding nsdecimalnumber

是否可以在NSDecimalNumber的索引处找到数字?

例如这样的事情可能吗?

var a: NSDecimalNumber = 10.00123456789
var indexOfa = a(index: 6)
//indexOfa = 6 (6th position from the left)

我基本上试图创建一个自定义舍入函数,该函数在x.xx5上向下舍入并在x.xx6上向上舍入。

例如: 67.5558四舍五入为67.55。 67.5568四舍五入为67.56。

......不是四舍五入问题的副本。我在这里具体询问如何在NSDecimalNumber的指定索引处找到一个数字。

你联系的答案也没有回答我的问题。我可以使用NSDecimalNumber的舍入行为,但它会向上舍入.5我需要它在.5上向下舍入.6。如果我能找到第二个十进制数的索引,我可以创建自己的自定义舍入函数。

我有一个有效的解决方案。但它太可怕了。那里有一些NSDecimalNumber扩展,但你可能猜到他们在做什么。而且我确信这是一个更好的方式...

public func currencyRoundDown() -> NSDecimalNumber {
    let rounded: NSDecimalNumber
    let toThree = self.roundDown(3)
    let lower = self.roundDown(2).adding(0.005)
    if lower.moreThan(toThree) || lower.same(toThree) {
        rounded = toThree.roundDown(2)
    } else {
        rounded = toThree.roundUp(2)
    }
    return rounded
}

1 个答案:

答案 0 :(得分:0)

  

是否可以在NSDecimalNumber的索引处找到数字?

让我们考虑如何使用Double。在此渲染中,“索引”从小数点开始计算。

将10乘以索引,将索引数字带入1s位置。现在取其余的模数为10.这是有问题的数字。

    let d = 1234.56789 // the 5 is 1, the 6 is 2, the 7 is 3 ...
    let place = 3 
    let shift = pow(10.0, Double(place)) * d
    let digit = Int(shift) % 10 // 7