3

私の単純なRubyMotionコード:

data = DataParser.parse(url)
error_ptr = Pointer.new(:object)
json = NSJSONSerialization.JSONObjectWithData(data, options: 0, error: error_ptr)

URLは、のように浮動小数点数の温度でJSONを提供する天気APIです{ "temp_c":22.4, ... }。不思議なことに、そのフロート22.4はに変換され22.3999938964844ます。

data.to_s温度の読み取り値を調べる22.4と、エラーは内にあると思いますNSJSONSerialization.JSONObjectWithData

  • 誰かがこれを確認できますか?
  • これに対する一般的な解決策はありますか?

すべてのフロートを強制的に丸めたくありません。

4

1 に答える 1

5

10進数「22.4」は、またはなどの2進数の浮動小数点数で正確に表すことはできませfloatdouble。したがって、「フロートを22.4に丸める」ことは意味がありません。これは、22.4に正確に等しいフロートがないためです。

精度を指定できるのは、出力用に浮動小数点数を10進文字列に変換する場合のみです。NSNumberFormatterまたはのようなprintf形式を使用できます"%.<precision>f

于 2013-03-22T12:33:49.503 に答える