如何舍入 swift 2 中的小数位
How to round decimal places in swift 2
尝试输出字典中三个数值的总和,然后将 13% 的 HST 添加到总和。但是,计算结果显示为 $13.5261,保留四位小数。我如何去掉小数点后的位置,所以它是 13.52 美元?或者有没有办法四舍五入,所以它是 13.53 美元
import UIKit
var menu = ["Coke": 1.99, "Coffee": 3.99, "Water": 5.99]
var hst = 1.13
var total = hst * (menu["Coke"]! + menu["Coffee"]! + menu["Water"]!)
print("The total for your order is
$\(total)")
通常的——也是最通用的——方式是NSNumberFormatter
let menu = ["Coke": 1.99, "Coffee": 3.99, "Water": 5.99]
let hst = 1.13
let total = hst * (menu["Coke"]! + menu["Coffee"]! + menu["Water"]!)
let formatter = NSNumberFormatter()
formatter.maximumFractionDigits = 2
let roundedTotal = formatter.stringFromNumber(total)!
print("The total for your order is $\(roundedTotal)")
不要四舍五入,使用格式:
let total: Double = 13.5261
let currency = "USD"
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = currency
print("The total for your order is \(formatter.string(from: total as NSNumber)!)")
这将在所有语言环境中正确打印金额,并且货币符号位置正确。
您不必关心 .currency
的小数位数,因为它将使用应与货币值一起使用的小数位数。
import Darwin
let d0 = 1.12345654
let r0 = round(d0) // 1
let r1 = round(10 * d0) / 10 // 1.1
let r2 = round(100 * d0) / 100 // 1.12
//...
let r7 = round(10000000 * d0) / 10000000 // 1.1234565
要格式化浮点数,四舍五入到一定位数,请使用其他人讨论的 NSNumberFormatter
。
要对数字进行四舍五入(而不是仅仅使用特定的小数位数来显示它),您可以使用 Decimal
:
let menu = ["Coke": 1.99, "Coffee": 3.99, "Water": 5.99]
let hst = 1.13
let subtotal = menu
.map { Decimal([=10=].value).round(2) } // convert the values to decimals
.reduce(Decimal(0), +) // add them up
let rate = Decimal(hst).round(2) // get rate as decimal
let total = subtotal * rate // calculate total
let result = (subtotal * rate).round(2) // round it
通常,只使用 NSNumberFormatter
就足够了,但是如果您要对这些四舍五入的数字进行任何后续运算(例如,将一堆四舍五入的数字相加),您实际上必须对它们进行四舍五入,如上所示,而不是依赖格式化程序。
FWIW,这是上面使用的舍入例程:
extension Decimal {
func round(_ scale: Int, roundingMode: NSDecimalNumber.RoundingMode = .plain) -> Decimal {
var value = self
var result = Decimal()
NSDecimalRound(&result, &value, scale, roundingMode)
return result
}
}
尝试输出字典中三个数值的总和,然后将 13% 的 HST 添加到总和。但是,计算结果显示为 $13.5261,保留四位小数。我如何去掉小数点后的位置,所以它是 13.52 美元?或者有没有办法四舍五入,所以它是 13.53 美元
import UIKit
var menu = ["Coke": 1.99, "Coffee": 3.99, "Water": 5.99]
var hst = 1.13
var total = hst * (menu["Coke"]! + menu["Coffee"]! + menu["Water"]!)
print("The total for your order is
$\(total)")
通常的——也是最通用的——方式是NSNumberFormatter
let menu = ["Coke": 1.99, "Coffee": 3.99, "Water": 5.99]
let hst = 1.13
let total = hst * (menu["Coke"]! + menu["Coffee"]! + menu["Water"]!)
let formatter = NSNumberFormatter()
formatter.maximumFractionDigits = 2
let roundedTotal = formatter.stringFromNumber(total)!
print("The total for your order is $\(roundedTotal)")
不要四舍五入,使用格式:
let total: Double = 13.5261
let currency = "USD"
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = currency
print("The total for your order is \(formatter.string(from: total as NSNumber)!)")
这将在所有语言环境中正确打印金额,并且货币符号位置正确。
您不必关心 .currency
的小数位数,因为它将使用应与货币值一起使用的小数位数。
import Darwin
let d0 = 1.12345654
let r0 = round(d0) // 1
let r1 = round(10 * d0) / 10 // 1.1
let r2 = round(100 * d0) / 100 // 1.12
//...
let r7 = round(10000000 * d0) / 10000000 // 1.1234565
要格式化浮点数,四舍五入到一定位数,请使用其他人讨论的 NSNumberFormatter
。
要对数字进行四舍五入(而不是仅仅使用特定的小数位数来显示它),您可以使用 Decimal
:
let menu = ["Coke": 1.99, "Coffee": 3.99, "Water": 5.99]
let hst = 1.13
let subtotal = menu
.map { Decimal([=10=].value).round(2) } // convert the values to decimals
.reduce(Decimal(0), +) // add them up
let rate = Decimal(hst).round(2) // get rate as decimal
let total = subtotal * rate // calculate total
let result = (subtotal * rate).round(2) // round it
通常,只使用 NSNumberFormatter
就足够了,但是如果您要对这些四舍五入的数字进行任何后续运算(例如,将一堆四舍五入的数字相加),您实际上必须对它们进行四舍五入,如上所示,而不是依赖格式化程序。
FWIW,这是上面使用的舍入例程:
extension Decimal {
func round(_ scale: Int, roundingMode: NSDecimalNumber.RoundingMode = .plain) -> Decimal {
var value = self
var result = Decimal()
NSDecimalRound(&result, &value, scale, roundingMode)
return result
}
}