[英]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.