1
私はダイビングアプリケーションを作成していますが、その1つはダイビングの評価をCoreDataに倍精度で保存することです。インタフェースは、coredataオブジェクトからdouble値を取得し、画面に表示できる必要があります。しかし、私のコードから得た問題は、オブジェクトから返されたdoubleが非常に小さいことです(eは-315の累乗)。なぜこれが起こっているのか分かりません。ここでCoreDataのDoubleは非常に小さい数値を返します
if let dives = self.diveSite?.logged_dives {
for dive in dives {
print("######### dive site info ########")
rating = Double(dive.rating) + rating
print(dive)
print("raw dive site rating is \(dive.rating)")
print("dive rating is \(rating)")
}
} else {
print("no logged_dives")
}
は迅速でDiveLogオブジェクトは以下の通りです
######### dive site info ########
<ScubaDoo.DiveLog: 0x7fe9ea02cbc0> (entity: DiveLog; id: 0xd000000000180002 <x-coredata://2B6F1E6F-1EDA-4910-91FA-0593E05F9EB2/DiveLog/p6> ; data: {
current = nil;
depth = 0;
"dive_at" = "0xd000000000140000 <x-coredata://2B6F1E6F-1EDA-4910-91FA-0593E05F9EB2/DiveSite/p5>";
id = nil;
latitude = 0;
longitude = 0;
rating = 5;
"sea_condition" = nil;
temperature = 0;
time = nil;
weather = nil;
})
raw dive site rating is 5.35679601527854e-315
dive rating is 1.06203402623994e-314
dive site rating is 1.06203402623994e-314
...コンソールにプリントアウトされているものです。私は本当にこれについての手掛かりを持っていません。評価のプロパティを取得する間に何かが外れているようですか?
import Foundation
import CoreData
extension DiveLog {
@NSManaged var time: NSDate?
@NSManaged var latitude: NSNumber?
@NSManaged var id: String?
@NSManaged var rating: NSNumber?
@NSManaged var depth: NSNumber?
@NSManaged var temperature: NSNumber?
@NSManaged var weather: String?
@NSManaged var current: String?
@NSManaged var sea_condition: String?
@NSManaged var longitude: NSNumber?
@NSManaged var dive_at: DiveSite?
}
NSNumberを使用していることがわかりました。 Swift Doubleタイプを直接使用することができますか?また、私はあなたがrating.doubleValueでNSNumber値にアクセスする必要があると思います。直接アクセスすることはできません。 – VojtaStavik
値はちょうど0であるはずです(それは妥当な近似値です)。 – DeFrenZ
'rating'はオプションなので、' dive.rating! 'を印刷するとどうなりますか? –