'floatValue'を使用してfloat値に変換するNSNumber
と、精度に違いがあります。たとえば、値が2.3の「myNumber」があり、NSNumber
「floatValue」を使用してmyNumberをfloatに変換すると、その値は2.29999になります。しかし、私は正確に2.30000が必要です。2.3以降のゼロの数に問題はありません。「2.9」ではなく「2.3」が必要です。
どうすればいいですか?
'floatValue'を使用してfloat値に変換するNSNumber
と、精度に違いがあります。たとえば、値が2.3の「myNumber」があり、NSNumber
「floatValue」を使用してmyNumberをfloatに変換すると、その値は2.29999になります。しかし、私は正確に2.30000が必要です。2.3以降のゼロの数に問題はありません。「2.9」ではなく「2.3」が必要です。
どうすればいいですか?
正確な精度が必要な場合は、を使用しないでくださいfloat
。double
より高い精度が必要な場合は、を使用してください。それはまだ正確ではありません。myNumberに10を掛けて、unsigned intに変換して算術演算を実行し、floatまたはdoubleに変換して、10で除算すると、最終結果がより正確になる可能性があります。これらのどれも十分に正確でない場合は、GNUMPBignumなどの任意精度の算術ライブラリを調べることをお勧めします。
私は次のことを行いましたが、正しく表示されています
NSNumber *num = [NSNumber numberWithFloat:2.3];
float f = [num floatValue];
NSLog(@"%f", f);
次のようなもので遊ぶことができます:
float x = 2.3f;
NSNumber *n = [NSNumber numberWithFloat:x];
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setPositiveFormat:@"0.#"];
NSString *s = [fmt stringFromNumber:n];
float f = [s floatValue];