0

我正在从 json 提要中解析价格,但如果价格等于,我想显示另一个按钮0

所以我得到了类似的东西

NSString *const Small = [NSString stringWithFormat:  @"%i", [PriceFree intValue]];

注意:PRICEFREE = 0 .

    if ([StoreParse objectForKey:@"price"]) {
    //display button to pay   

    } else if ([StoreParse objectForKey:@"price"] == Small) {

   //display button = free
    } else {
    }

但它只显示“支付”按钮,如果价格为0

4

3 回答 3

4

您的错误是使用 比较字符串引用==,因此您正在比较两个变量是否引用同一个对象,而不是它们是否引用包含相同字符的字符串;做后者使用的NSString方法isEqualToString

但是,您最好比较整数值,即:

首先更改 的定义Small

int Small = [PriceFree intValue];

然后将您的比较更改为:

[[StoreParse objectForKey:@"price"] intValue] == Small)

这具有基于字符串表示的数值而不是它们包含的字符进行比较的优点,例如@"00"将比较等于,@"0"因为两者都具有 value 0

在成本为 0.99 美元(99 美分)的附属问题后跟进

如果您的价格以美元和美分作为浮点数,那么您可以:

(a) 需要更改int& intValuetofloatfloatValue以上;

(b) 使用,例如,将值转换为美分int Small = (int)([PriceFree floatValue] * 100);或者

(c) 使用十进制数。

(a) 有一个缺点是你最终测试浮点值是否相等,这不是一个好主意;(b) 避免这种情况并且很容易;而(c)也避免了这种情况,但涉及更多。真正的财务计算不使用浮点数来避免舍入错误。

于 2012-05-08T00:05:23.277 回答
2

您正在做的比较是针对指针值,而不是实际字符串,请尝试使用:

} else if ([[StoreParse objectForKey:@"price"] isEqualToString:Small]) {

比较实际的字符串。

于 2012-05-07T23:52:38.367 回答
0

您正在做的是昵称的字符串类型(强类型的文字游戏)。字符串类型是指将每种类型转换为字符串并使用字符串方法来比较或操作数据。

字符串对象用于文本,并且仅用于文本。如果要比较数字,请确保您使用的是数字类型。

我认为它StoreParse是一个字典,包含一个price映射到NSNumberNSDecimalNumber表示项目价格的键。如果price也是一个字符串,那么您需要修改您的应用程序,以便StoreParse包含price键的数字类型。

If priceis an NSNumberor NSDecimalNumberthen 你可以通过以下方式判断某物是否免费:

if ([[StoreParse objectForKey:@"price"] intValue] == 0)
{
    // price is 0
}

小费:

如果您正在处理货币,请使用NSDecimalNumber能够准确表示十进制数字的。这很有用,因为大多数货币都是十进制的。二进制浮点类型(例如floatdouble)无法准确表示所有十进制数,在处理货币时,尽可能保持准确性很重要。

于 2012-05-08T02:06:58.570 回答