2013-03-22 1 views
2

내 간단한 RubyMotion 코드 :NSJSONSerialization.JSONObjectWithData 실수 변환/반올림 오류?

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

URL입니다 { "temp_c":22.4, ... } 같은 수레와 같은 온도와 JSON을 제공하는 날씨 API입니다. 이상하게 정확하게 플로트 22.422.3999938964844으로 변환됩니다.

data.to_s을 검사하면 온도가 22.4이므로 NSJSONSerialization.JSONObjectWithData 안에 오류가 있다고 가정합니다.

  • 누구든지 확인할 수 있습니까?
  • 일반적인 해결책이 있습니까?

모든 플로트를 반올림하는 것을 원하지 않습니다.

답변

5

십진수 "22.4"가 은 이진 부동 소수점 숫자 등 float 또는 double로 정확하게 표현할 수 없습니다. 따라서 "22.4로 부동 소수점 반올림"은 정확하게 22.4와 같은 부동 소수점이 없기 때문에 의미가 없습니다.

부동 소수점 숫자를 출력 할 10 진수 문자열로 변환하는 경우에만 정밀도를 지정할 수 있습니다. NSNumberFormatter 또는 "%.<precision>f과 같은 printf 형식을 사용할 수 있습니다.