2016-07-02 3 views
-1

辞書から3つの数値の合計を出力し、合計に13%のHSTを追加しようとしています。ただし、計算は小数点以下4桁の$ 13.5261として出力されます。小数点以下を切り取るにはどうすればいいですか?13.52ドルですか?それとも、それを丸める方法があるので、それは通常$ 13.53すぐに小数点以下を丸める方法2

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)") 
+2

はないラウンド、書式設定 – Sulthan

+0

はい、使用する書式設定を使用していますが、あなた'LL場合は、同様に丸めする必要があるかもしれませんこの数値でさらに算術演算を行う必要があります。 – Rob

+0

@Robお金で算術演算をしているなら、あなたはNSDecimalNumberを使うべきです。 – Sulthan

答えて

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)") 
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で小数点以下の桁数を気にする必要はありません。これは、金額で使用する小数点以下の桁数を使用するためです。浮動小数点数のフォーマットに

+0

はSwift 3で動作しません! :( – mythicalcoder

+1

@maven swift 3のために更新されました。 – Sulthan

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 
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小数点以下の桁数が2に丸めるように定義されています

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 
    } 
} 
関連する問題