2016-01-18 43 views
0

我有CoreData表與NSString字段。但是在過濾器中,我需要將其解釋爲float。NSString作爲CoreData謂詞中的浮點數

fieldName.floatValue沒有給出正確的結果。如果有任何方法可以在不更改表中的字段類型的情況下執行此操作?

編輯:

數據是:

company = "CompanyName"; 
date = "2016-01-17"; 
value = "379.76"; 

我斷言

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value.floatValue > 2000"]; 

但值379.76進入的結果。使用value.floatValue將所有相同的值作爲字符串進行比較。

TNX

+0

是否字符串字段包括值的數量,即「 3.1415" 。然後將該字符串轉換爲浮動。 您需要解決您的問題並提供更多詳細信息,以便其他人能夠理解。 –

+0

yourString = @「2.1234」; float value = [yourString floatValue]; –

+0

爲什麼列應該是一個浮動的字符串?爲什麼這個日期是一個字符串? – trojanfoe

回答

0

我想你應該改變字符串類型爲數字,這是最簡單的方法。 您可以使用此斷言:

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) { 
    return [[evaluatedObject value] floatValue] > 2000; // Change id to your Class 
}]; 

但這謂詞不能與CoreData使用。所以你應該將提取結果存儲到一個數組中,然後使用這個謂詞。

+0

佩克洛,謝謝 –

+0

感謝所有。決定的主要想法是我必須過濾取數請求導致數組 –

1

如果你知道value是不是消極的,你可以使用這一招:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"abs:(value) > 2000"]; 

abs:力SQLite的治療value屬性爲數字。

或者,給它加零(爲負數作品):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"add:to:(value,0) > 2000"]; 
+0

有趣,儘管如果他有負數並且想要解釋它們,這將不起作用。是否有其他函數強制SQLite將屬性視爲數字?可能是「圓」或對結果影響較小的事情。 – EmilioPelaez

+0

我不知道任何其他人會工作。我想你可以在謂詞中單獨處理負數。@EmilioPelaez – pbasdf

+0

你是對的,他可以使用該謂詞來獲得值大於2000的所有實體,然後過濾以確保該值不以'-'開頭以避免獲得負數。 – EmilioPelaez

0
//Try with this. 
// '>' will apply when 'value' is number. So, I first put your values in an array. Only then, I can apply the predicate. 

NSString *company = @"CompanyName"; 
NSString *date = @"2016-01-17"; 
NSString *value = @"379.76"; 

NSArray *dataArray = @[@(value.floatValue),@(379.76),@(379),@(200)]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self > %f",200.0]; 
NSArray *array = [dataArray filteredArrayUsingPredicate:predicate]; 
//output:@(379.76),@(379.76),@(379) 
+0

Tnx,Jamil。我會盡力去做。 Tnx你再次 –

+0

核心數據你'值'應該是數字,以避免從NSString轉換爲NSNumber – Jamil

0

試試這個:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value > 2000"]; 
+0

MS,tnx。祝你好運。但是這會導致比較字符串 –