尝试从字典中输出三个数字值的总和,然后将HST的总和增加13%。但是,计算打印为 $ 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)")
答案 0 :(得分:3)
要格式化浮点数(四舍五入到一定数量的数字),请使用其他人讨论的NSNumberFormatter
。
要实际舍入数字(而不是仅使用一定数量的小数位显示),您可以使用NSDecimalNumber
:
let menu = ["Coke": 1.99, "Coffee": 3.99, "Water": 5.99]
let hst = 1.13
let total = NSDecimalNumber(double: menu["Coke"]!)
.decimalNumberByAdding(NSDecimalNumber(double: menu["Coffee"]!))
.decimalNumberByAdding(NSDecimalNumber(double: menu["Water"]!))
.decimalNumberByMultiplyingBy(NSDecimalNumber(double: hst), withBehavior: RoundingBehavior())
let message = "The total for your order is \(total)"
一般情况下,只使用NSNumberFormatter
就足够了,但是如果您要使用这些舍入数字进行任何进一步的算术运算(例如,加上一堆舍入数字),您实际上必须对它们进行舍入,如上所示,而不是依赖于格式化程序。
注意,上面的RoundingBehavior
被定义为舍入到两个小数位:
class RoundingBehavior: NSObject, NSDecimalNumberBehaviors {
func roundingMode() -> NSRoundingMode {
return .RoundPlain
}
func scale() -> Int16 {
return 2
}
func exceptionDuringOperation(operation: Selector, error: NSCalculationError, leftOperand: NSDecimalNumber, rightOperand: NSDecimalNumber?) -> NSDecimalNumber? {
return nil
}
}
答案 1 :(得分:1)
通常 - 也是最通用的 - 方式是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)")
答案 2 :(得分:1)
不要圆,使用格式:
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
的小数位数,因为它将使用应与货币值一起使用的小数位数。
答案 3 :(得分:0)
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