far*_*igo 3 iphone floating-point double decimal objective-c
我有一个问题,将计算结果四舍五入到两位小数.
这是一个财务计算,当结果涉及半便士时,我会期望数字被四舍五入,但实际上是向下舍入.
复制问题:
float raw = 16.695;
NSLog(@"All DP: %f",raw);
NSLog(@"2 DP: %.2f",raw);
Run Code Online (Sandbox Code Playgroud)
返回:
All DP: 16.695000
2 DP: 16.69
Run Code Online (Sandbox Code Playgroud)
而我希望看到:
All DP: 16.695000
2 DP: 16.70
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议,如果这是设计或如果(很可能)我错过了什么,如果有什么我可以做到绕过它.在这种情况下,它是最重要的.
在此先感谢,奥利
floats进行财务计算!浮点数不能准确表示值.16.695是其中之一.当您尝试将该值存储在float中时,实际上会得到最接近的可表示值.在浮点上执行一系列操作时,可能会丢失精度,然后就会失去准确性.这导致赔钱.
使用实际货币类型,使用NSDecimalNumber,或使用计算int您关注的最小单位的s 进行所有计算(即,1050如果您想要几分钱便士,则为10.50美元,或者1.050美元).