2012-11-22 3 views
0

J'ai une expression de la strCal chaîne strcal valeur est @ "((24 - 18)/87) * 100" Je veux avoir le résultat correct à 4 décimales afin Je récupère le résultat en utilisant la méthode floatValueobtenir zéro au lieu d'une valeur flottante-Objective C

Mais au lieu de 6,8966 je reçois 0

Ceci est mon code

NSString *strCal=[NSString stringWithFormat:@" 
         ((%d%@)%@)%@",number,strMinus,strDivide,strMultiple]; 
    NSExpression *exp=[NSExpression expressionWithFormat:strCal]; 
    float result=[[exp expressionValueWithObject:nil context:nil] floatValue]; 
    NSLog(@"result:%f",result); 

résultat: 0,000000

Répondre

2

Je trouve i t moi-même en convertissant le 87 dans la chaîne strCal flotter valeur comme ci-dessous

@ « ((24-18)/87,00) * 100 »

pourquoi signifie parce que soit le dividende ou le diviseur doit être float de sorte que le compilateur (LLVM) affiche la réponse dans float

+0

Comme vous avez dit, dividende ou le diviseur doit être un flotteur. En fait, dépend du compilateur. Parfois seulement le dividende doit être au moins un flotteur, ou seulement le diviseur, et parfois, les deux ... Donc, pour être prudent, je recommande de convertir les deux en flotteur. – Larme

+0

@Larme U signifie que tous les compilateurs de xcode n'ont pas cette fonctionnalité? –

+0

Je n'ai pas essayé avec XCode et les versions du compilateur. Je le sais par des collègues qui travaillent sur d'autres projets en C (pour l'électronique) par exemple. – Larme

0

Je pense que vous devez utiliser DDMathParser Qui est le mieux dans cette situation. Je l'ai utilisé dans un de mon projet qui fait face à même problème que vous avez rencontré

DDMathEvaluator *eval = [DDMathEvaluator defaultMathEvaluator]; id value=[eval evaluateString:@"1/2" withSubstitutions:nil error:&error]; NSLog(@"Result %@",value); Result 0.5

Questions connexes