检查NSString对象中的数字是否相等?

时间:2012-05-07 23:48:29

标签: objective-c

我正在从json Feed解析价格,但如果价格等于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

,则点按免费按钮

3 个答案:

答案 0 :(得分:4)

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

然而,你可能最好比较整数值,即:

首先更改Small的定义:

int Small = [PriceFree intValue];

然后将您的比较更改为:

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

这具有以下优点:基于数值比较字符串代表它们而不是它们包含的字符,例如@"00"将与@"0"进行比较,因为它们都具有值0

补贴问题后跟进成本为0.99美元(99美分)

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

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

(b)使用比较int Small = (int)([PriceFree floatValue] * 100)将值转换为美分;或

(c)使用十进制数字。

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

答案 1 :(得分:2)

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

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

比较实际的字符串。

答案 2 :(得分:0)

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

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

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

如果priceNSNumberNSDecimalNumber,那么您可以通过以下方式判断某些内容是否免费:

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

提示:

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