Swfit Float/Double保留一位小数

博主在Swift开发中遇到高度精确值问题,需求为数值类型参数,而非字符串类型。Swift浮点型无法精准到一位,只有String类型可转换。博主采用官方提供的NSDecimalNumber高精度计算,保留一位小数,将其放入model后发送JSON到设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近,在swfit开发中,遇到了高度精确值的问题,比如:需求是要数值类型的参数:Float/Double/Number,而不是字符串String 类型。因此,会遇到这样的问题:

在这里插入图片描述
这样的值,虽然是Float数值,但不是我们所需的。

上面是我写入一个2.8,在swfit浮点型没有精准到一位的说法。只有string类型,可以转String(format: “%1.0f”, data)

重点如下:

一:用官方提供的 NSDecimalNumber高精度计算,可以计算到写入的值,保留一位小数即可。

 /*
     NSRoundPlain:四舍五入  NSRoundDown:向下取正   NSRoundUp:向上取正     NSRoundBankers:(特殊的四舍五入,碰到保留位数后一位的数字为5时,根据前一位的奇偶性决定。为偶时向下取正,为奇数时向上取正。如:1.25保留1为小数。5之前是2偶数向下取正1.2;1.35保留1位小数时。5之前为3奇数,向上取正1.4)
     scale:精确到几位小数
     raiseOnExactness:发生精确错误时是否抛出异常,一般为NO
     raiseOnOverflow:发生溢出错误时是否抛出异常,一般为NO
     raiseOnUnderflow:发生不足错误时是否抛出异常,一般为NO
     raiseOnDivideByZero:被0除时是否抛出异常,一般为YES
     */
    NSDecimalNumber * inputNumber = [[NSDecimalNumber alloc]initWithString:@"340.0700001"];
    NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler
                                       decimalNumberHandlerWithRoundingMode:NSRoundDown
                                       scale:2
                                       raiseOnExactness:NO
                                       raiseOnOverflow:NO
                                       raiseOnUnderflow:NO
                                       raiseOnDivideByZero:YES];
    NSDecimalNumber * number = [inputNumber decimalNumberByRoundingAccordingToBehavior: roundUp];
    NSLog(@"%@",number);

我的做法:

var modelValue:NSNumber?

let number1a = NSDecimalNumber(string: "\(999.1222845)")

在这里插入图片描述

let a = "\(smodel.trim.value!)"
let calOne = Float(a)
cal_value = String(format: "%0.1f", calOne!)


//NSDecimalNumber高精度计算到一位,再传给model(NSnumber类型),Json是一位小数的校准值
 let cal_cf = self.util.convertCCal(toFahren:cal_value!)
 let cal_str = String(format: "%.0.1f",cal_cf)
 let number1 = NSDecimalNumber(string: "\(cal_str)")
 
 modelValue = number1

在这里插入图片描述
放入到model,最后一起发送整个模型JSON,到设备!
在这里插入图片描述

如果你对此不懂。可以网上看看如何使用NSDecimalNumber。因为swfit和oc语言两者不一样,OC的话可以直接字符串转Double,放到model模型,然后就是数值保留一位小数了。

在此记录一下,希望可帮助到需要的伙伴们…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值