go1.1.2 Win64를 사용하여, "marshal"이 float64를 포함하는 구조체 인 Go 프로그램을 가지고 있습니다. float64의 값이 정수가 아닌 경우 예. 1234.44, 그러면 "마샬링"이 부동 (json.Marshal)으로 처리됩니다. 그러나 그것은 예를 들어 정수입니다. "1234.00"은 정수 "1234"로 마샬링됩니다. Dart (30188)는 다른 끝 (Dart)에서 이것을 받으면 정수를 정수로 처리합니다 (JSON.decode). 결과적으로 Dart 프로그램은 float (double) 데이터의 표현에 소수점이 포함되지 않은 경우 중단되고지도에서 double로 추출하려고 시도합니다.float64를 JSON으로 올바르게 마샬링 하시겠습니까?
이것은 분명히 여러 가지 방법으로 해결할 수 있습니다 (예 : 정수로 변환 한 다음 다시 float으로 변환). 그러나이 상황을 처리하는 또 다른 (더 나은) 방법이 있는지 궁금해했습니다.
float64를 정수로 변환하는 것보다 더 좋은 방법이 있습니까?
고맙습니다. 나는 이것이 Dart 끝에서 해결되어야한다고 생각한다. Dart에서는 정수를 double에 할당 할 수 없습니다. 이것은 나에게 이례적으로 보입니다. 그러나 나는 이론적 관점 (캐스트 업, 캐스트 다운 등)에서 나는 틀렸다는 것을 인정합니다. 내가 현재 가지고있는 솔루션은 다음과 같습니다 : "double dAcctBal = (mAcctData [ 'D_AcctBal'] num)/1;" (여기서 mAcctData는 "D_AcctBal"이 정수인지 아니면 정수인지 여부에 따라 두 배가 될 수있는 맵입니다). 이 솔루션은 나에게 약간의 해킹이 표시되지만, 정수를 double에 직접 할당 할 수 없다면? –
예, 다트 측에서 해결하는 것이 가장 좋음에 동의합니다. 내가 아는 한 기꺼이 그런 해결책을 줄 수도 있지만 다트에 대한 나의 경험은 매우 제한적입니다. 좀 더 많은 지식을 가진 사람이라면 더 관용적 인 다트 솔루션을 찾을 수 있습니다. – ANisus
JSON은 숫자 리터럴의 의미를 지정하지 않으므로 정수보다 double을 사용하는 것이 정확하지 않습니다. 다트에는 두 가지 숫자 유형이 있습니다.소수점이나 지수 부분을 포함하는 것은 모두 double이어야하며 그 외 모든 것은 정수로 파싱되어야합니다.이 경우 Dart에서는 double보다 정밀도가 좋습니다. 이렇게하면 가능한 JSON 번호에서 많은 정보가 보존됩니다. 모든 숫자를 두 배로 만들려면 .toDouble을 수동으로 사용해야합니다. – lrn