Skip to content

Commit feff0b8

Browse files
committed
Handle very large and very small numbers with scientific notation #27
1 parent 9f4ef4e commit feff0b8

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/codegen.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ pub trait Generator {
5151
self.write_char(b'-');
5252
}
5353

54+
if num > 1e19 || num < 1e-15 {
55+
self.write(format!("{:e}", num).as_bytes());
56+
return;
57+
}
58+
5459
let start = self.current_index();
5560

5661
self.write_digits_from_u64(num as u64);

tests/lib.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,22 @@ fn stringify_integer() {
137137

138138
#[test]
139139
fn stringify_small_number() {
140-
assert_eq!(stringify(0.000000000000001), "0.000000000000001");
140+
assert_eq!(stringify(1e-15), "0.000000000000001");
141+
}
142+
143+
#[test]
144+
fn stringify_large_number() {
145+
assert_eq!(stringify(1e19), "10000000000000000000");
146+
}
147+
148+
#[test]
149+
fn stringify_very_large_number() {
150+
assert_eq!(stringify(3.141592653589793e20), "3.141592653589793e20");
151+
}
152+
153+
#[test]
154+
fn stringify_very_small_number() {
155+
assert_eq!(stringify(3.141592653589793e-16), "3.141592653589793e-16");
141156
}
142157

143158
#[test]

0 commit comments

Comments
 (0)