2019年7月21日日曜日

小数点以下の処理

Swiftの文字列操作を使って小数点以下の処理を実装してみました。

class CUT54UP: NSObject{
    var mode: String
    static let sharedCUT54UP: CUT54UP = CUT54UP()
    private override init(){
        mode = "CUT"
    }
    
    func change(_ input: String) -> String {
        if input.contains(".") {
            switch mode {
            case "CUT":
                let text = String(input[input.startIndex ..< input.firstIndex(of:".")!])
                return text
            case "5/4":
                var text = String(input[input.startIndex ..< input.firstIndex(of:".")!])
                let afterTheDecimalPoint = String(input[input.firstIndex(of:".")! ... input.endIndex])
                let decimalPoint = String(afterTheDecimalPoint.prefix(1))
                if Decimal(string: decimalPoint)! >= 5 {
                    let retVal = Decimal(string: text)! + Decimal(integerLiteral: 1)
                    text = NSDecimalNumber(decimal: retVal).stringValue
                }
                return text
            case "UP":
                var text = String(input[input.startIndex ..< input.firstIndex(of:".")!])
                let afterTheDecimalPoint = String(input[input.firstIndex(of:".")! ... input.endIndex])
                let decimalPoint = String(afterTheDecimalPoint.prefix(1))
                if Decimal(string: decimalPoint)! > 0 {
                    let retVal = Decimal(string: text)! + Decimal(integerLiteral: 1)
                    text = NSDecimalNumber(decimal: retVal).stringValue
                }
                return text
            default:
                return input
            }
        }
        else{
            return input
        }
    }
}

モード切り替えがあり、モードを覚えていないといけないので、シングルトンで実装しています。

こんな感じでしょうか。このコードはまだテストしていないので、ただしく動くかわかりませんが、こんな感じで書けそうです。

0 件のコメント: