2017-11-22 5 views
0

私の電卓用のコードがあります。ユーザー指定の桁数に丸めた小数

設定にはステッパーがあります。

ユーザーがステッパー2を押したときに計算機の答えが小数点以下2桁に丸められるようにするにはどうすればよいですか?


小数点以下9桁まで切り上げられます。

displayResultLabel.text = String(format: "%.9f", newValue) 


MainViewController.swift

var currentInput: Double { 
    get { 
     return Double (displayResultLabel.text!)! 
    } 
    set { 
     let value = "\(newValue)" 
     let ValueArray = (value.components(separatedBy:".")) 
     if ValueArray[1] == "0" { 
      displayResultLabel.text = "\(ValueArray[0])" 
     } else { 
      displayResultLabel.text = String(format: "%.9f", newValue) 
       //displayResultLabel.text = "\(newValue)" 
     } 
     stillTyping = false 
    } 
} 

SettingsViewController.swift

@IBOutlet weak var Stepr1: UIStepper! 

@IBAction func stepperValueChanged(sender: UIStepper) { 
    //let am = NSNumber(value: sender.value) 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    UserDefaults.standard.set(sender.value, forKey: Savings) 
    //stepperValueChanged(sender: Stepr1) 
    MAXLabel.text = Int(sender.value).description 
     let userDefaults = UserDefaults.standard 
     userDefaults.setValue(MAXLabel.text, forKey: "data") 
     userDefaults.synchronize() 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Save value 
    if let Savings = UserDefaults.standard.value(forKey: Savings) { 
     Stepr1.value = Savings as! Double 
     stepperValueChanged(sender: Stepr1) 
    } 
} 

+0

フロアまたはラウンドを使用して再度100で割る –

+2

説明を丸めたい場合は、NumberFormatterを使用して希望の丸めモードを設定します。 –

+0

@LeoDabusどうすればいいですか?私はこれで実際に理解していません – B2Fq

答えて

2

あなたは、書式文字列内文字列補間を使用することができます。

let places = Int(Stepr1.value) 
displayResultLabel.text = String(format: "%.\(places)f", newValue) 

注:これは、常にユーザーのロケールが,を指定しても、小数点として.を使用します。 this answerのようにlocaleを考慮に入れてNumberFormatterを使用してください。

+2

この形式は、ユーザーのロケールに基づいて正しくありますか? – rmaddy

+0

@rmaddy、あなたのロケールがセパレータとして '.'を使用していない限りは許されません。リンクされた[duplicate]のLeoDabusの答えは、ロケールを考慮に入れた 'NumberFormatter'を使用します。 – vacawama

関連する問題