Skip to content

Commit 5c93c2f

Browse files
adamwMiguel Silvestre
authored and
Miguel Silvestre
committed
circe#68: properly detect if a number if a float or int
(cherry picked from commit ec4c896)
1 parent c388d07 commit 5c93c2f

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

src/main/scala/io/circe/yaml/Printer.scala

+6-7
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,8 @@ final case class Printer(
9393
scalarNode(Tag.NULL, "null"),
9494
bool =>
9595
scalarNode(Tag.BOOL, bool.toString),
96-
number => {
97-
if (number.toLong.nonEmpty)
98-
scalarNode(Tag.INT, number.toString)
99-
else
100-
scalarNode(Tag.FLOAT, number.toString)
101-
},
96+
number =>
97+
scalarNode(numberTag(number), number.toString),
10298
str =>
10399
stringNode(str),
104100
arr =>
@@ -158,9 +154,12 @@ object Printer {
158154
private def yamlTag(json: Json) = json.fold(
159155
Tag.NULL,
160156
_ => Tag.BOOL,
161-
number => if (number.toLong.nonEmpty) Tag.INT else Tag.FLOAT,
157+
number => numberTag(number),
162158
_ => Tag.STR,
163159
_ => Tag.SEQ,
164160
_ => Tag.MAP
165161
)
162+
163+
private def numberTag(number: JsonNumber): Tag =
164+
if (number.toString.contains(".")) Tag.FLOAT else Tag.INT
166165
}

src/test/scala/io/circe/yaml/PrinterTests.scala

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.circe.yaml
22

3-
import io.circe.Json
3+
import io.circe.{Json, JsonNumber}
44
import io.circe.yaml.Printer.{FlowStyle, LineBreak, StringStyle, YamlVersion}
55
import org.scalatest.{FreeSpec, Matchers}
66

@@ -102,6 +102,11 @@ class PrinterTests extends FreeSpec with Matchers {
102102
Printer.spaces2.pretty(json) shouldEqual "22.22\n"
103103
}
104104

105+
"Root float without decimal part" in {
106+
val json = Json.fromDoubleOrNull(22.0)
107+
Printer.spaces2.pretty(json) shouldEqual "22.0\n"
108+
}
109+
105110
"Version" in {
106111
val json = Json.fromString("foo")
107112
Printer.spaces2.copy(version = YamlVersion.Yaml1_1).pretty(json) shouldEqual

0 commit comments

Comments
 (0)