我想将数字舍入到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位的值。
*“但如果我这样做,那么它返回一个字符串”* - 科学记数法*仅*用于将数字转换为字符串时使用。 –
当然'双'*不能*完全代表所有的小数部分,这可能是你的问题的一部分。 –
是的,但是这会返回一串永远持续的数字,但我只想显示数字前6位。如果返回的字符串太长,我仍然必须将其剪下。我知道我可以操作字符串,但我觉得有一个更好的方法可以让我做到这一点。 –