iOS Objective-C 如何获得 2 位小数四舍五入的浮点值?

标签 ios objective-c floating-point decimal rounding

我有一个

float a = 1412.244019;

我需要将 a 四舍五入到最接近的第二位小数,例如 1412.24000000。我知道如果我想只显示两位小数,我会使用 %.2f,但事实并非如此。出于数学原因,我需要新的 a 作为 float 。

我尝试了几种在 stackoverflow 上找到的方法,但没有成功。我使用的更明显的一个,我在下面提到,但仍然没有运气使用它。你能看出为什么魔法没有发生吗?

PS:它有时确实能达到预期的效果,但并非总是如此,这让我开始思考......嗯......

提前致谢。

代码:

float a = 1412.244019;
NSLog(@"a is %f", a); //output a is 1412.244019
a = [[NSString stringWithFormat:@"%.2f", a] floatValue];
NSLog(@"a is %f", a); //output a is 1412.239990

编辑:

当我在上述手术后使用 float a 时,SEEMS 认为它是 1412.240000,尽管 NSLog 说的不同......很奇怪。 但我得到了我想要的,所以感谢浪费时间无所事事:)

编辑 我很乐意选择你们所有人作为正确答案,但由于我只能选择一个,所以我选择了第一个带有额外解释的好答案(最后两个)。

最佳答案

你试过吗?

CGFloat val = 37.777779;

CGFloat rounded_down = floorf(val * 100) / 100;   /* Result: 37.77 */
CGFloat nearest = floorf(val * 100 + 0.5) / 100;  /* Result: 37.78 */
CGFloat rounded_up = ceilf(val * 100) / 100;      /* Result: 37.78 */

来源:Rounding Number to 2 Decimal Places in C

补充:您只是无法控制计算机如何存储浮点值。

因此这些四舍五入的值可能不完全是“明显的”十进制值,但它们将非常非常接近,这是您将拥有的最大保证。

关于iOS Objective-C 如何获得 2 位小数四舍五入的浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063721/

相关文章:

python - 从字符串中提取科学数字

ios - 核心数据 - NSManagedObjectContext 与 NSFetchedResultsController

ios - RemoveProfile 命令在 iOS MDM 协议(protocol)中不起作用

objective-c - Objective-C 中的继承是什么概念?

objective-c - UITableView,是否可以使用左对齐和右对齐在同一单元格中包含2个字符串?

c++ - 浮点比较

c++ - 如何找到最近的下一个/上一个 double 值(numeric_limits::epsilon 对于给定的数字)

ios - 界面生成器仅向 TextField 元素添加底部边框

ios - CGImageRef 消耗大量内存

objective-c - 自定义初始化失败时如何清理内存