authorgravatar for marc@tiehu.isMarc Tiehuis <marc@tiehu.is> 2024-03-24 12:53:08+13:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2024-03-24 10:23:48+02:00
log091aa54a3ed74b8a19f44ffb20e29c5f81de0c58
treecb6a4e676ddf4ef394609d4bcf15765b67214389
parente90583f5d17a5a841b7ed8e654af9ed8ce119de5

fix comptime float formatting

Closes #19379 Closes #18046

2 files changed, 4 insertions(+), 2 deletions(-)

lib/std/fmt.zig+2
......@@ -1839,6 +1839,8 @@ test comptimePrint {
18391839 try std.testing.expectEqualSlices(u8, "100", comptimePrint("{}", .{100}));
18401840 try std.testing.expectEqualStrings("30", comptimePrint("{d}", .{30.0}));
18411841 try std.testing.expectEqualStrings("30.0", comptimePrint("{d:3.1}", .{30.0}));
1842 try std.testing.expectEqualStrings("0.05", comptimePrint("{d}", .{0.05}));
1843 try std.testing.expectEqualStrings("5e-2", comptimePrint("{e}", .{0.05}));
18421844}
18431845
18441846test "parse u64 digit too big" {
lib/std/fmt/format_float.zig+2-2
......@@ -270,9 +270,9 @@ pub fn formatDecimal(buf: []u8, f_: FloatDecimal128, precision: ?usize) FormatEr
270270
271271 // fixed bound: leading_digit(1) + point(1)
272272 const req_bytes = if (f.exponent >= 0)
273 2 + @abs(f.exponent) + olength + (precision orelse 0)
273 @as(usize, 2) + @abs(f.exponent) + olength + (precision orelse 0)
274274 else
275 2 + @max(@abs(f.exponent) + olength, precision orelse 0);
275 @as(usize, 2) + @max(@abs(f.exponent) + olength, precision orelse 0);
276276 if (buf.len < req_bytes) {
277277 return error.BufferTooSmall;
278278 }