これまではとりあえず、無難に演算をDoubleでやってきましたが、演算部の分離に成功したので、そのままエンジンを10進演算に切り替えたいと思います。
イコールキーとかを押した時の演算関数になります。
では10進演算に置き換えましょう。それがこちら。
これまでのエンジンはこちら。
func equalOperation() -> Double?{
if noEqualOperaterSet.contains(operaterQueue!) {
switch operaterQueue {
case "+": return Double(operand1!)! + Double(operand2!)!
case "-": return Double(operand1!)! - Double(operand2!)!
case "/": return Double(operand1!)! / Double(operand2!)!
case "*": return Double(operand1!)! * Double(operand2!)!
default: return nil
}
}
else{
return nil
}
}
イコールキーとかを押した時の演算関数になります。
では10進演算に置き換えましょう。それがこちら。
func equalOperation() -> String?{
if noEqualOperaterSet.contains(operaterQueue!) {
switch operaterQueue {
case "+":
let retVal = Decimal(string: operand1!)! + Decimal(string: operand2!)!
return NSDecimalNumber(decimal: retVal).stringValue
case "-":
let retVal = Decimal(string: operand1!)! - Decimal(string: operand2!)!
return NSDecimalNumber(decimal: retVal).stringValue
case "/":
let retVal = Decimal(string: operand1!)! / Decimal(string: operand2!)!
return NSDecimalNumber(decimal: retVal).stringValue
case "*":
let retVal = Decimal(string: operand1!)! * Decimal(string: operand2!)!
return NSDecimalNumber(decimal: retVal).stringValue
default: return nil
}
}
else{
return nil
}
}
こんな感じです。この返り値をStringにする方法が結構わからなかったですね。
1
1
1.2
1.23
1.234
1.2345
Operator -
1
1
1.2
1.23
1.234
1.2340
Operator *
0.0005
1
10
100
1,000
Operator =
0.5
計算結果も1.2345 - 1.2340 *1000 = 0.5 となり、どうやら10進で計算できているようです。
0 件のコメント:
コメントを投稿