【发布时间】:2013-02-21 04:28:40
【问题描述】:
简化问题:
我有一个浮点数 0.02275,当我将它四舍五入到小数点后 4 位时,而不是预期的 0.0228 我得到 0.0227。我知道这是因为 0.02275 的浮点值类似于 0.0227499999999999...,当四舍五入到小数点后 4 位时得到 0.0227。
float a = 0.02275;
NSLog(@"float a is %f",a);
NSLog(@"float a, rounded to 4 decimal places is %0.4f",a);
NSLog(@"float a, rounded to 10 decimal places is %0.10f",a);
给出输出
float a is 0.022750
float a, rounded to 4 decimal places is 0.0227
float a, rounded to 10 decimal places is 0.0227499995
我的问题是:如何正确舍入以得到 0.0228 而不是 0.0227?
真实情况的局限性:
浮点数取自 plist 文件;将NSNumber floatValue 分配给变量a 时使用。
我的程序是处理金钱和百分比。货币价值是用户输入的,百分比是固定的,或者是用户输入的。上例中的浮点数是导致我的计算不准确的百分比值之一。
【问题讨论】:
-
如果不能改变变量赋值,能不能把plist文件中的值改高一点,让内部表示落在
0.02275的“右边” ?这是一个狡猾的黑客,但它可能会满足您的需求。 -
尝试使用
NSDecimalNumber,因为您正在处理金钱问题。
标签: objective-c c cocoa-touch floating-point currency