@@ -560,13 +560,25 @@ fn formatFloatValue(
560
560
options : FormatOptions ,
561
561
writer : anytype ,
562
562
) ! 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
+
563
567
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
+ };
565
572
} 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
+ };
567
577
} else {
568
578
@compileError ("Unknown format string: '" ++ fmt ++ "'" );
569
579
}
580
+
581
+ return formatBuf (buf_stream .getWritten (), options , writer );
570
582
}
571
583
572
584
pub fn formatText (
@@ -1791,3 +1803,17 @@ test "padding" {
1791
1803
try testFmt ("==================Filled" , "{:=>24}" , .{"Filled" });
1792
1804
try testFmt (" Centered " , "{:^24}" , .{"Centered" });
1793
1805
}
1806
+
1807
+ test "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
+
1814
+ test "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
+ }
0 commit comments