我分配一個浮點值,以一個UILabel當超出限制的限制處理,值的變化,以及我不正確result.I我使用了最小字體文本值自動調整大小的文本和不正確的浮點值截尾。 我想提出一個calculator.If我想爲50000x50000造成的結果應該是2500000000.0000但標籤顯示類似2499999548.0000的UILabel提供了運行時
回答
如果你有http://en.wikipedia.org/wiki/Floating_point讀......你會發現,比任何數量較大如果你想有四位小數,10000需要使用64位浮點數而不是32位浮點數。
double
的數據類型是一個64位浮點數。
要特別小心,因爲CGFloat
,這將是在iPhone 5S 64位和在iPhone 5C 32位和任何舊款iPhone。
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
它給了我正確的結果,直到5000000x1000000 = 5000000000000,但如果我再乘以10這個結果然後答案是出來是49,999,999,139,840.00 – Yieshu
@Yieshu浮點值永遠不是「正確的」 ,浮點數不可能存儲精確的值。隨着數字越來越大,他們的精確度就越低。即使5 * 5會給你一個不正確的浮動,如果你檢查值10或20小數位。如果數值非常大,那麼數據格式變得完全無用,準確性變得非常糟糕。 –
@Yieshu看到我更新的答案,以證明浮動不準確。你應該閱讀我鏈接的維基百科頁面,瞭解它爲什麼這樣做。請注意,double並不能完美地解決問題,它只是意味着您需要更大的值來運行相同的問題。 –
如果要顯示那麼你的計算中使用(在這裏你需要轉換浮動)。
float mycalculation = (float)50000*50000;
yourLableName.text = [NSString stringWithFormat:@"%f", mycalculation ];
我使用上面的代碼,它爲我工作正常。
試試這個,它的工作.....
問我,如果有任何疑問...
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];
}
float num;
num = 50000.0f * 50000.0f;
Lbl.text = [NSString stringWithFormat:@"%f",num];
它爲我工作完美...
類型定義你的結果,以及最好在這種情況下,使用雙不僅僅是浮
這兩條線路上的代碼將工作..
double num = (double)50000*50000;
label.text = [NSString stringWithFormat:@"%.1f",num];
將「f」添加到值的末尾應該有訣竅。與5.0不同,5.0f給你一個浮點數的字面值。
嘗試50000.0f x 50000.0f
- 1. 在運行時提供ServiceKnownType?
- 2. Dagger的運行時交換實現提供了依賴關係
- 3. 春天 - 在運行時提供@Autowired
- 4. __builtin__在運行時如何提供?
- 5. Windows運行時提供ECDH嗎?
- 6. 超載<<上枚舉運營商提供了運行時錯誤
- 7. 運行PHP提供了大量的「SNMP」的錯誤在Ubuntu 14.04
- 8. 「基本C++」:提供了iostream運營商
- 9. 從Eclipse中運行JUnit測試提供了ClassNotFound的錯誤
- 10. 正在運行的ant版本提供了「org.junit包不存在」
- 11. netbeans 7.2提供了運行但不部署的選項
- 12. 運行Oozie的工作流提供了錯誤:E0732
- 13. 訪問在運行時創建的UILabel
- 14. Gcloud應用部署提供了不支持Python 2.5的運行時錯誤
- 15. 爲什麼下面的代碼提供了運行時錯誤現在
- 16. 運行rake遷移提供了MySQL錯誤schema_migrations.frm
- 17. NS2 DSR.tcl代碼不運行提供了一些錯誤
- 18. Spark Streaming應用程序在運行24小時後提供了OOM
- 19. JPA 2條件爲gt運算符提供運行時類型
- 20. MySQL爲行提供了終生難題
- 21. 這個查詢提供了多行
- 22. 提供了併發的Pthreads
- 23. dfs.replication提供了複製因素,file.replication提供了什麼
- 24. 如何在並行運行時爲子工提供參數?
- 25. 運行時是否提供編譯時信息?
- 26. guice - 在運行時選擇不同的提供者
- 27. 是否可以在運行時提供新的PropertiesConfiguration文件?
- 28. 如何向Tomcat提供複雜的運行時參數?
- 29. DOM4J根據運行時提供的DTD驗證xml
- 30. 提供@Query與運行時生成的jpql查詢
添加您的標籤的計算結果文本代碼。 –
如果你使用'double'而不是'float'呢?當處理大量數據時,浮點數不準確(請參閱維基百科)。你可以發佈你的代碼分配值的標籤? –
嘗試((浮動)50000 * 50000) – larva