我正在为一个UIlabel分配一个浮点值,当限制超过其处理限制时,该值会改变并显示错误的结果。我使用的是具有最小字体文本值的autoresize文本并截断尾部。 我正在制作一个计算器。如果我想要一个50000x50000的结果,结果应该是2500000000.0000,但标签显示的东西像2499999548.0000
答案 0 :(得分:2)
如果您读取http://en.wikipedia.org/wiki/Floating_point ...您将发现任何大于10,000的数字需要使用64位浮点数而不是32位浮点数(如果您想要有四个小数位)。
double
数据类型是64位浮点数。
要特别小心CGFloat
因为iPhone 5S上的64位和iPhone 5C以及任何旧款iPhone上的32位。
对于数十亿的数字,64位浮点数是准确的。任何大于此的东西,你都会想要开始使用NSDecimalNumber
课程。这可能是你应该为计算器应用做的。
这里演示了为什么在需要准确性时不应使用float或double的原因:
float aFloat = 10000.2;
float bFloat = 10000.0;
NSLog(@"%.15f", aFloat - bFloat); // 0.200195312500000
double aDouble = 10000.2;
double bDouble = 10000.0;
NSLog(@"%.15f", aDouble - bDouble); // 0.200000000000728
NSDecimalNumber *a = [NSDecimalNumber decimalNumberWithString:@"10000.2"];
NSDecimalNumber *b = [NSDecimalNumber decimalNumberWithString:@"10000.0"];
NSLog(@"%@", [a decimalNumberBySubtracting:b]); // 0.2
真的很大的数字更糟糕的是:
float aFloat = 10000000000000000000000.2;
float bFloat = 10000000000000000000000.0;
NSLog(@"%.15f", aFloat - bFloat); // 0.000000000000000
double aDouble = 10000000000000000000000.2;
double bDouble = 10000000000000000000000.0;
NSLog(@"%.15f", aDouble - bDouble); // 0.000000000000000
NSDecimalNumber *a = [NSDecimalNumber decimalNumberWithString:@"10000000000000000000000.2"];
NSDecimalNumber *b = [NSDecimalNumber decimalNumberWithString:@"10000000000000000000000.0"];
NSLog(@"%@", [a decimalNumberBySubtracting:b]); // 0.2
答案 1 :(得分:0)
如果您想显示您的计算,请使用(此处您需要投射浮动。)
float mycalculation = (float)50000*50000;
yourLableName.text = [NSString stringWithFormat:@"%f", mycalculation ];
我使用上面的代码,它适合我。
答案 2 :(得分:0)
试试这个,它的工作.....
问我是否有任何疑问......
NSString *a = @"50000";
NSString *b = @"50000";
float ValueA = [a floatValue]; //instead of "a" you can pass Textfield1.text
float ValueB = [b floatValue]; //instead of "b" you can pass Textfield2.text
NSLog(@"%@",[self getStringFromFloat:ValueA*ValueB]);
-(NSString *)getStringFromFloat:(float)yourFloatValue
{
return [NSString stringWithFormat:@"Value =%.4f",yourFloatValue];
}
答案 3 :(得分:0)
float num;
num = 50000.0f * 50000.0f;
Lbl.text = [NSString stringWithFormat:@"%f",num];
它完美地为我工作......
答案 4 :(得分:0)
类型也定义你的结果,最好在这种情况下使用double而不仅仅是float
代码上的这两行将起作用..
double num = (double)50000*50000;
label.text = [NSString stringWithFormat:@"%.1f",num];
答案 5 :(得分:0)
在值的末尾添加“f”应该可以解决问题。与5.0不同,5.0f为您提供浮点数的字面值。
尝试50000.0f x 50000.0f