没有科学的符号和舍入双

时间:2017-10-19 18:53:54

标签: swift nsnumberformatter

我想将一个数字舍入到6个位置,我不希望它使用科学记数法显示。我使用此代码将小数舍入到6位,但如果值非常小,它仍然使用科学记数法显示它。我知道我可以使用数字格式化程序(也在下面显示)来删除科学记数法,但如果我这样做,那么它返回一个字符串,所以我不能将字符串舍入到一定数量的小数位。如果我首先进行舍入,那么在所有情况下仍然不起作用。它仍然显示一些没有舍入的数字。实现这一目标的最佳方法是什么?它应该适用于数字无限长或重复的所有不同场景

extension Double {
    // Rounds the double to decimal places value
    func rounded(toPlaces places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
       return (self * divisor).rounded() / divisor
    }
}




let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.number(from:"")

我尝试使用此代码

let currentValue = 1/2.3344 //answer is 0.42837559972584...
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.maximumFractionDigits = 6
guard let finalNum = numberFormatter.number(from: String(describing: currentValue)) else {return nil}
text = String (describing: finalNum)

我希望它显示0.428375。该值四舍五入到小数点后6位。

当前值为:let currentValue = 1/233442为0.00000428371 ...我希望它显示0.000004。小数四舍五入到小数点后6位而不是科学计数法。

当前值为:let currentValue = 1/2334429我希望它显示0,因为这是舍入到6位小数的值。

1 个答案:

答案 0 :(得分:3)

number(from: someString)方法将字符串转换为数字, 你反过来想要它:

let currentEntry = 1/2.3344

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 6

guard let text = numberFormatter.string(for: currentEntry) else {
    // ...
}
print(text) // 0.428376

请注意,您的String(describing:)次转化只会隐藏问题。 你真的应该避免String(describing:)(即使编译器建议 它作为一个Fix-it!),它几乎从不做你需要的。