簡體   English   中英

目標 C 浮動到 NSString

[英]Objective C float to NSString

在我的應用程序中,我有這樣的代碼

financialCost = [NSString stringWithFormat: @"%@",[valueFromBank objectForKey:@"Cost"]];
 
[valueFromBank objectForKey:@"Cost"] // This value comes from JSON through Websocket event.

一切正常。 我面臨的問題是

當我得到 json 值為 5 時,它工作正常 當我得到 json 值為 6.1 時,它工作正常

但奇怪的是,當我將 json 值設為 8.3 時,它顯示為 8.3100001200 對於值 9.1,它顯示為 9.1000002200

我想准確地顯示 8.3 和 9.1。

有沒有解決這個問題的方法。

除了簡單的數學表達式的計算甚至可能發生的解碼問題。 在反序列化的 JSON 中,字典小數作為對象到達,可以讀取為 NSNumber。

// just an given example JSON as NSDictionary
NSDictionary *valueFromBank = @{@"Cost":@(8.3100001200), @"second":@9.1000002200, @"third":@"8.3100001200"};

NSNumber *numberCost = [valueFromBank objectForKey:@"Cost"];
NSLog(@"as NSNumber %@",numberCost);

NSNumber 在此處為8.31000012 ,如示例 dict 中所示。
NSNumber 的神奇之處在於,object 也可以是書面的十進制 NSString。 以便

NSNumber *numberCostV2 = [valueFromBank objectForKey:@"third"];

還是理解為 NSNumber 8.31000012

float floatCost = [numberCostV2 floatValue];
NSLog(@"as float %f",floatCost);

浮動在這里是8.310000

NSString *financialCost = [NSString stringWithFormat:@"%.2f",floatCost];
NSLog(@"as NSString withFormat %@", financialCost);

NSString 格式為8.31

可以從中學到什么?
看起來很簡單,但黃金法則是在最后一步進行轉換,如果可能或根據需要精確地轉換。 有時 NSString 會幫助你和/或讓它變得更糟。

NSDecimalNumber *decimal = [[NSDecimalNumber alloc] initWithDouble:8.124];
NSLog(@"as double %f and as NSString %@", [decimal doubleValue], [decimal stringValue]);

作為雙 8.124000和作為NSString 8.124000000000002048

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM