swift2 如何在swift 2中舍入小数位

lyr7nygr  于 2022-11-06  发布在  Swift
关注(0)|答案(4)|浏览(239)

尝试从字典中输出三个数值的总和,然后将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)")
kadbb459

kadbb4591#

要格式化浮点数(舍入为特定位数),请使用NSNumberFormatter,如其他人所讨论的。
要实际舍入数字(而不是仅使用特定的小数位数显示),可以使用Decimal

let menu = ["Coke": 1.99, "Coffee": 3.99, "Water": 5.99]
let hst = 1.13

let subtotal = menu
    .map { Decimal($0.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
    }
}
9gm1akwq

9gm1akwq2#

最常用也是最通用的方法是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)")
b4qexyjb

b4qexyjb3#

不舍入,使用格式:

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的小数位数,因为它将使用货币值应该使用的小数位数。

mzmfm0qo

mzmfm0qo4#

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

相关问题