Skip to content

Commit ece6f8c

Browse files
authored
Merge pull request #232 from jwfing/master
fixed: parse negative double wrong with gson lib
2 parents 825c2ce + f98d419 commit ece6f8c

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

core/src/main/java/cn/leancloud/gson/NumberDeserializerDoubleAsIntFix.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ public static Object parsePrecisionNumber(Number num) {
1717
// here you can handle double int/long values
1818
// and return any type you want
1919
// this solution will transform 3.0 float to long values
20+
if (Math.floor(num.doubleValue()) != Math.ceil(num.doubleValue())) {
21+
return num;
22+
}
2023
double doubleValue = Math.ceil(num.doubleValue());
2124
if (doubleValue == num.intValue()) {
2225
return num.intValue();

core/src/test/java/cn/leancloud/json/GsonCommonTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ public void testDoubleAndLong() {
149149
System.out.println(responses.toString());
150150
}
151151

152+
public void testNumberParser() {
153+
Number numbers[] = {3, 4.5, 5.0, -0, 0.0, 0.0002, -0.0002, -5, -6.5};
154+
for (Number num: numbers) {
155+
System.out.println("original: " + num + ", floor: " + Math.floor(num.doubleValue()) + ", ceil: " + Math.ceil(num.doubleValue())
156+
+ ", parsed: " + NumberDeserializerDoubleAsIntFix.parsePrecisionNumber(num));
157+
}
158+
}
159+
152160
public void testAppAccessEndpoint() {
153161
String text = "{\"ttl\":3600,\"stats_server\":\"https://stats_server\", \"push_server\": \"https://push_server\"," +
154162
" \"rtm_router_server\": \"https://rtm_router_server\", \"api_server\": \"https://api_server\"," +

0 commit comments

Comments
 (0)