Commit 091aa54a3e

Marc Tiehuis <marc@tiehu.is>
2024-03-24 00:53:08
fix comptime float formatting
Closes #19379 Closes #18046
1 parent e90583f
Changed files (2)
lib/std/fmt/format_float.zig
@@ -270,9 +270,9 @@ pub fn formatDecimal(buf: []u8, f_: FloatDecimal128, precision: ?usize) FormatEr
 
     // fixed bound: leading_digit(1) + point(1)
     const req_bytes = if (f.exponent >= 0)
-        2 + @abs(f.exponent) + olength + (precision orelse 0)
+        @as(usize, 2) + @abs(f.exponent) + olength + (precision orelse 0)
     else
-        2 + @max(@abs(f.exponent) + olength, precision orelse 0);
+        @as(usize, 2) + @max(@abs(f.exponent) + olength, precision orelse 0);
     if (buf.len < req_bytes) {
         return error.BufferTooSmall;
     }
lib/std/fmt.zig
@@ -1839,6 +1839,8 @@ test comptimePrint {
     try std.testing.expectEqualSlices(u8, "100", comptimePrint("{}", .{100}));
     try std.testing.expectEqualStrings("30", comptimePrint("{d}", .{30.0}));
     try std.testing.expectEqualStrings("30.0", comptimePrint("{d:3.1}", .{30.0}));
+    try std.testing.expectEqualStrings("0.05", comptimePrint("{d}", .{0.05}));
+    try std.testing.expectEqualStrings("5e-2", comptimePrint("{e}", .{0.05}));
 }
 
 test "parse u64 digit too big" {