Objective c iPhone-将浮点值舍入不起作用

Objective c iPhone-将浮点值舍入不起作用,objective-c,cocoa,floating-point,rounding,Objective C,Cocoa,Floating Point,Rounding,我无法实现四舍五入浮动 这些呼叫都返回3.599999,而不是超时特技和超时的3.6。 如何将3.6的值转换成NSString和float变量 #define minTimeout 1.0 #define defaultNbRetry 5 float secondsWaitedForAnswer = 20.0; float minDelayBetween2Retry = 0.5; int theoNbRetries = defaultNbRetry; floa

我无法实现四舍五入浮动

这些呼叫都返回3.599999,而不是超时特技和超时的3.6。
如何将3.6的值转换成NSString和float变量

#define minTimeout 1.0
#define defaultNbRetry 5

    float secondsWaitedForAnswer = 20.0;
    float minDelayBetween2Retry = 0.5;

    int theoNbRetries = defaultNbRetry;
    float theoTimeout = 0.0;

    while (theoTimeout < minTimeout && theoNbRetries > 0) {
        theoTimeout = (secondsWaitedForAnswer - (theoNbRetries-1)*minDelayBetween2Retry) / theoNbRetries;
        theoNbRetries--;
    }

    float theoTimeoutTrick = [[NSString stringWithFormat:@"%.1f", theoTimeout] floatValue];
    theoTimeout = roundf(theoTimeout * 10)/10.0;
#定义minTimeout 1.0
#定义DefaultNbrery 5
浮点数第二个SWAITEDFORANSWER=20.0;
浮动的minDelayBetween2Retry=0.5;
int theonbreatries=defaultnbreatry;
浮动超时=0.0;
while(超时0){
theoTimeout=(第二次拒绝-(theoNbRetries-1)*第二次测试之间的思维)/theoNbRetries;
丁腈橡胶--;
}
float theoTimeoutTrick=[[NSString stringWithFormat:@“%.1f”,theoTimeout]floatValue];
theoTimeout=roundf(theoTimeout*10)/10.0;
来自:

这会让你得到一个圆字符串。我相信你可以把它解析回一个float

好的,下面是一些测试代码和一些结果:

NSLog(@"%f", round(10*3.56)/10.0);
    =>3.600000
NSLog(@"%f", round(10*3.54)/10.0);
    =>3.500000
NSLog(@"%f", round(10*3.14)/10.0);
    =>3.100000
好吧,你知道吗?您的原始代码在我的机器OSX 10.6和Xcode 4上按预期工作。您如何准确地看到您的输出?

来自:

这会让你得到一个圆字符串。我相信你可以把它解析回一个float

好的,下面是一些测试代码和一些结果:

NSLog(@"%f", round(10*3.56)/10.0);
    =>3.600000
NSLog(@"%f", round(10*3.54)/10.0);
    =>3.500000
NSLog(@"%f", round(10*3.14)/10.0);
    =>3.100000


好吧,你知道吗?您的原始代码在我的机器OSX 10.6和Xcode 4上按预期工作。你到底是如何看到你的输出的?

3.6不能精确地用有限位数的二进制表示。我确信我的银行帐户没有使用IEEE浮动来表示我的余额!(主要是因为它们的范围有限:-)。使用格式化输出打印一个适当的四舍五入值。您可以在实际输出为字符串时进行格式化。我所能看到的就是分配浮点和整数。输出打印在哪里?或者,使用NSDecimal和NSDecimalNumber。@Kerrek货币处理软件通常使用二进制编码的小数(BED),每个数字使用4位。但是,如果您尝试类似于
NSLog(@“%f”,3.6)
你会发现它确实可以打印
3.60000
3.6不能精确地用有限位数的二进制表示。我确信我的银行账户不会使用IEEE浮动来计算我的余额!(主要是因为它们的范围有限:-)。使用格式化输出打印一个适当的四舍五入值。您可以在实际输出为字符串时进行格式化。我所能看到的就是分配浮点和整数。输出打印在哪里?或者,使用NSDecimal和NSDecimalNumber。@Kerrek货币处理软件通常使用二进制编码的小数(BED),每个数字使用4位。但是,如果您尝试类似于
NSLog(@“%f”,3.6)
你会发现它确实打印了
3.60000
@Oliver:那篇文章的问题是要求四舍五入到最接近的0.5,所以他在乘以2后四舍五入,然后将结果除以2。如果要四舍五入到最接近的整数,可以使用
[formatter setMaximumFractionDigits:0]
。oucchhh。。。我是说。。。哎哟!怎么回事。。。。因为是圆形的,所以效果不太好。我刚拿到3.5分。两个问题:2.0f在这里有什么用?我可以用什么NSNumberFormatter常量来用常用的方法对小数进行四舍五入(你知道,直到0.5,再加上0.5或更多),如果你花五秒钟在文档中搜索
NSNumberFormatterRoundDown
你就会找到答案…@b战神:我只想在这里得到3。6@Rob凯尼格尔:啊。不起作用。我当然看过医生了。如果我设置float roundedValue=3.56;奥利弗:那篇文章的问题是要求四舍五入到最接近的0.5,所以他在乘以2后四舍五入,然后将结果除以2。如果要四舍五入到最接近的整数,可以使用
[formatter setMaximumFractionDigits:0]
。oucchhh。。。我是说。。。哎哟!怎么回事。。。。因为是圆形的,所以效果不太好。我刚拿到3.5分。两个问题:2.0f在这里有什么用?我可以用什么NSNumberFormatter常量来用常用的方法对小数进行四舍五入(你知道,直到0.5,再加上0.5或更多),如果你花五秒钟在文档中搜索
NSNumberFormatterRoundDown
你就会找到答案…@b战神:我只想在这里得到3。6@Rob凯尼格尔:啊。不起作用。我当然看过医生了。如果我设置float roundedValue=3.56;我刚拿到3.5分,我应该拿到3.6分。