authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-10 20:09:11-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-08-10 20:09:11-04:00
logbc176fb7390b4d03b786bbc567448836140a67fc
tree20411f966bb98776782ad2c4a26d76d0d7973640
parent56e1080ba3535939565f5291526c184c34f6f63a
parent6701046cdd85d7a702be38a593e8385a5dfb4562
signature Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #6002 from MasterQ32/zig_fmt_align_fix

Fixes floating point alignment in std.fmt.format

1 files changed, 28 insertions(+), 2 deletions(-)

lib/std/fmt.zig+28-2
......@@ -560,13 +560,25 @@ fn formatFloatValue(
560560 options: FormatOptions,
561561 writer: anytype,
562562) !void {
563 // this buffer should be enough to display all decimal places of a decimal f64 number.
564 var buf: [512]u8 = undefined;
565 var buf_stream = std.io.fixedBufferStream(&buf);
566
563567 if (fmt.len == 0 or comptime std.mem.eql(u8, fmt, "e")) {
564 return formatFloatScientific(value, options, writer);
568 formatFloatScientific(value, options, buf_stream.writer()) catch |err| switch (err) {
569 error.NoSpaceLeft => unreachable,
570 else => |e| return e,
571 };
565572 } else if (comptime std.mem.eql(u8, fmt, "d")) {
566 return formatFloatDecimal(value, options, writer);
573 formatFloatDecimal(value, options, buf_stream.writer()) catch |err| switch (err) {
574 error.NoSpaceLeft => unreachable,
575 else => |e| return e,
576 };
567577 } else {
568578 @compileError("Unknown format string: '" ++ fmt ++ "'");
569579 }
580
581 return formatBuf(buf_stream.getWritten(), options, writer);
570582}
571583
572584pub fn formatText(
......@@ -1791,3 +1803,17 @@ test "padding" {
17911803 try testFmt("==================Filled", "{:=>24}", .{"Filled"});
17921804 try testFmt(" Centered ", "{:^24}", .{"Centered"});
17931805}
1806
1807test "decimal float padding" {
1808 var number: f32 = 3.1415;
1809 try testFmt("left-pad: **3.141\n", "left-pad: {d:*>7.3}\n", .{number});
1810 try testFmt("center-pad: *3.141*\n", "center-pad: {d:*^7.3}\n", .{number});
1811 try testFmt("right-pad: 3.141**\n", "right-pad: {d:*<7.3}\n", .{number});
1812}
1813
1814test "sci float padding" {
1815 var number: f32 = 3.1415;
1816 try testFmt("left-pad: **3.141e+00\n", "left-pad: {e:*>11.3}\n", .{number});
1817 try testFmt("center-pad: *3.141e+00*\n", "center-pad: {e:*^11.3}\n", .{number});
1818 try testFmt("right-pad: 3.141e+00**\n", "right-pad: {e:*<11.3}\n", .{number});
1819}