iOS 货币交易输入数字检测 小数点前面三位,小数点后允许两位,并且向上取整(无精度丢失问题)

首先是数字检测 正则表达式 小数点前面三位,小数点后允许两位

Swift
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
        let expression = "^\\d{0,3}(\\.\\d{0,2})?$"
        let regex = try! NSRegularExpression(pattern: expression, options: NSRegularExpression.Options.allowCommentsAndWhitespace)
        let numberOfMatches = regex.numberOfMatches(in: newString, options:NSRegularExpression.MatchingOptions.reportProgress, range: NSMakeRange(0, (newString as NSString).length))
        return numberOfMatches != 0
    }



然后货币交易以及向上取整这里用到
NSDecimalNumberHandler
先定义一个枚举(Swift)
internal enum OperatorType{
    //加
    case addition
    //减
    case subtraction
    //乘
    case Multiplication
    //除
    case division
}


货币计算并向上取整的方法


首先根据字符串初始化两个NSDecimalNumber对象
然后初始化NSDecimalNumberHandler为条件限制,比如保留小数点位数,向上取整,四舍五入等
参数介绍:
roundingMode:
    NSRoundPlain,   // Round up on a tie //这个暂时未尝试,大家可以自己试下

    NSRoundDown,    // Always down == truncate  //只舍不入

    NSRoundUp,      // Always up    // 只入不舍

    NSRoundBankers  // on a tie round so last digit
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值