我正在尝试将浮点数保存到nsnumber但我只想用两位小数保存它。我知道我可以通过使用此代码
首先转换为NSString
来实现
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
但是看起来很笨拙。我想做的就是转换
float numb = 23.25454 into NSNumber 23.25
答案 0 :(得分:1)
使用任何这些功能来围绕它
float rounded = round(val * 100) / 100;
float rounded_down = floorf(val * 100) / 100;
float nearest = floorf(val * 100 + 0.5) / 100;
float rounded_up = ceilf(val * 100) / 100;
答案 1 :(得分:1)
如果您正在寻找面向对象的方法,请尝试使用NSDecimalNumber
,它是NSNumber
的子类。使用您的浮点值初始化NSDecimalNumber,然后调用decimalNumberByRoundingAccordingToBehavior:
。这为您提供了一些选项,说明如何使用NSDecimalNumberBehaviors
进行截断或舍入,您可以在其中设置比例(小数点后的位数)和NSRoundingMode。查看the docs了解详情。
答案 2 :(得分:1)
使用此
float numb = 23.25454;
NSNumber *num = @((int)(numb*100)/100.0);
答案 3 :(得分:1)
不可能使用float
,double
或其中任何一个包裹为NSNumber
的方式执行此操作。您需要了解浮点的工作原理。
所有这些都使用二进制数字,您希望代表一个具有两个十进制位置的数字。二进制分数由1 / 2,1 / 4,1 / 8,1 / 16 ...的总和构成,而小数分数是1 / 10,1 / 100,1 / 1000的总和......并非所有可以表示为该系列之一中的值之和的值都可以表示为另一个中的和。这与表示十进制的1/3相似,它是3/10 + 3/100 + 3/1000 + .....
尝试写一下,例如,0.17 = 17/100 = 1/10 + 7/100,总和为1 / 2,1 / 4等等。它是1/8 + 9/200 = 1/8 + 1 / 32 + 11/8000(我只是在飞行中这样做,原谅任何错误!)=你明白了!
为了解决这个问题,有the NSDecimalNumber
class,它是NSNumber
的子类,代表基数为10的数字。该类提供了执行base-10算术的基本操作。您无法在base-10和base-2数字之间轻松混合算术,甚至无法直接从NSDecimalNumber
或float
创建double
- 您将后者格式化为{{ 1}}(即将它们转换为基数为10的表示) - 并使用NSString
方法提取double
值描述为:
接收器的近似值为
doubleValue
。
请注意近似。
这么长的答案来回答一个问题:你真的想存储一个double
或float
值到完全两个小数地方?
您可以使用double
,round
& floor
家庭大致做到这一点,但要为“错误”的结果做好准备。例如。尝试:
ceil
HTH
答案 4 :(得分:0)
float numb = 23.25454;
float myFloat = roundf(100 * numb) / 100.0;
NSNumber *number = [NSNumber numberWithFloat:myFloat];
答案 5 :(得分:0)
NSDecimalNumber与NSDecimalNumberHandler是获得准确精度的最佳方法,如果您想要作为对象。以下是示例代码。
Write-Host "##vso[build.updatebuildnumber]"$buildVersion
NSRoundingMode提供了更多Rounding选项。