Titanium JIRA Archive
Titanium SDK/CLI (TIMOB)

[TIMOB-26974] JSON.Parse() is converting int to string when number is .9

GitHub Issuen/a
TypeBug
PriorityCritical
StatusClosed
ResolutionInvalid
Resolution Date2019-06-07T22:28:23.000+0000
Affected Version/sn/a
Fix Version/sn/a
Componentsn/a
Labelsn/a
ReporterSrdjan Lukic-Bardak
AssigneeGary Mathews
Created2019-03-09T21:42:48.000+0000
Updated2019-06-07T22:28:23.000+0000

Description

I'm trying to debug the reson why JSON.Parse() is adding 0000001 at the end of some int numbers. My raw output form the API looks like RawInput {"Weight":10.9,"BodyFatPercentage":20.5} {"Weight":10.99,"BodyFatPercentage":50.5} But when I use JSON.parse(this.responseText); I end up with JSON object that looks like this. And as you can see number 70,9 - 80,9 and 90,9 get somehow converted. And only numbers in 70,80 and 90 Parsed object { BodyFatPercentage = 20.5; Weight="10.90000000000001"; } { BodyFatPercentage = 80.5; Weight="10.98999999999999"; } As you can see the parsed JSON objects property "Weight" is now a string, where BodyFatPercentage is still int. And if the number is .99 we get .989999

Comments

  1. Srdjan Lukic-Bardak 2019-03-09

    You can try it by doing this : var obj = JSON.parse('{ "Id": 52, "ElementId": "5e9e81ca-3980-4bf9-b7aa-bd3baa2d466c", "Chest": 60.9, "Waist": 70.9, "Hips": 80.9, "Thigh": 90.99, "Calf": 100.9 }') Ti.API.log(obj);
  2. Gary Mathews 2019-05-02

    This is expected, you are running into a precision error. None of the numbers are integers, integers are whole numbers. The numbers are doubles and there's not enough accuracy to store them correctly.

JSON Source