3

我需要将浮点数保存到 NSNumber(称为ordered.value 的变量)中。问题是在转换过程中十进制数字已设置为零。

此外,我添加了 3 个版本的变量的日志,因此您可以看到原始浮点数是正确的。然后 NSNumber 丢失了十进制数字。

这是我的第一次尝试(更简单的版本):

ordered.value = [NSNumber numberWithFloat:[o.valore floatValue]];
NSLog(@"%f,%f",[o.valore floatValue],[ordered.value floatValue]);

但我仍然丢失了十进制数字。日志:

2013-05-20 20:05:19.617 Piazzetta[9636:c07] 232.179993,232.000000
2013-05-20 20:05:19.617 Piazzetta[9636:c07] 20159.490234,20159.000000
2013-05-20 20:05:19.618 Piazzetta[9636:c07] 16.540001,16.000000

这是我的第二次尝试(使用 NSNumberFormatter)

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
ordered.value = [f numberFromString:o.valore];
NSLog(@"%f,%f",[o.valore floatValue],[ordered.value floatValue]);

日志:

2013-05-20 20:16:22.781 Piazzetta[9951:c07] 232.179993,232.000000
2013-05-20 20:16:22.782 Piazzetta[9951:c07] 20159.490234,20159.000000
2013-05-20 20:16:22.782 Piazzetta[9951:c07] 16.540001,16.000000
4

1 回答 1

7

我刚刚尝试了您的代码的简化版本:

NSString *valore = @"232.179993";
NSNumber *ordered = [NSNumber numberWithFloat:[valore floatValue]];
NSLog(@"Results: %f,%f",[valore floatValue],[ordered floatValue]);

哪个按预期工作:

// Results: 232.179993,232.179993

这使我相信它正在您的ordered对象中被修改(可能通过您的value属性的 setter 或 getter)。

如果您无法追踪到,请发布 setter 和/或 getter 的代码,我们可以看看。

于 2013-05-20T18:24:39.490 回答