Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 目标C:四舍五入浮动问题_Iphone_Objective C_Floating Point_Double_Decimal - Fatal编程技术网

Iphone 目标C:四舍五入浮动问题

Iphone 目标C:四舍五入浮动问题,iphone,objective-c,floating-point,double,decimal,Iphone,Objective C,Floating Point,Double,Decimal,我不同意把计算结果四舍五入到小数点后两位 这是一个财务计算,当结果涉及半便士时,我预计数字会向上舍入,但实际上是向下舍入 要复制此问题,请执行以下操作: float raw = 16.695; NSLog(@"All DP: %f",raw); NSLog(@"2 DP: %.2f",raw); 返回: All DP: 16.695000 2 DP: 16.69 鉴于我希望看到: All DP: 16.695000 2 DP: 16.70 有没有人能告诉我这是故意的,或者(很可能)我遗漏了

我不同意把计算结果四舍五入到小数点后两位

这是一个财务计算,当结果涉及半便士时,我预计数字会向上舍入,但实际上是向下舍入

要复制此问题,请执行以下操作:

float raw = 16.695;
NSLog(@"All DP: %f",raw);
NSLog(@"2 DP: %.2f",raw);
返回:

All DP: 16.695000
2 DP: 16.69
鉴于我希望看到:

All DP: 16.695000
2 DP: 16.70
有没有人能告诉我这是故意的,或者(很可能)我遗漏了什么,或者我能做些什么来绕开它。在这种情况下,这一点至关重要

提前感谢,,
据我所知,
NSLog()
函数只接受格式化参数,不尝试取整

您可能习惯使用支持舍入的
printf()
样式函数


我建议使用
math.h
中的许多函数之一在输出前对值进行四舍五入,并且仅依赖
NSLog()
进行格式设置

看到评论后

使用C标准函数族round()。roundf()用于浮动,round()用于双精度,roundl()用于长双精度。然后可以将结果强制转换为所选的整数类型

有些值是浮动的<代码>16.695就是其中之一。当您尝试将该值存储在浮点中时,实际上会得到最接近的可表示值。当你对一个浮点数执行一系列的操作时,你会失去精度。这会导致亏损

使用实际货币类型,使用或使用
int
s进行所有计算,计算出您关心的最小单位(即,
1050
整美分为10.50美元,如果您想要分币的分数,则为1.050美元)。

您可以尝试以下方法:

 - (void)testNSlogMethod {

    float value = 16.695; //--16.70
    value = value *100;

    int mulitpler = round(value);

    NSLog(@"%.2f",mulitpler/100.0f);
}

尝试NSLog(@“9 DP:%.9f”,原始);你会得到:16.694999695,如果你使用双精度,它会在你的例子中四舍五入,好吧,这是可行的,但出于兴趣,为什么?为什么它不将数字存储为设置的16.695?谢谢,但NSLog仅用于此示例-在实际应用程序中,我使用[NSString stringWithFormat:@“%.2f,xxx]。我相信这与printf()的取整方式相同是的。你建议的功能是什么?我相信这种风格的帖子被称为,我听说他们正在考虑将其添加到格式标签中: