func (b ByteSize) String() string {
switch {
case b >= YB:
- return fmt.Sprintf("%.2fYB", b/YB)
+ return fmt.Sprintf("%.2fYB", float64(b/YB))
case b >= ZB:
- return fmt.Sprintf("%.2fZB", b/ZB)
+ return fmt.Sprintf("%.2fZB", float64(b/ZB))
case b >= EB:
- return fmt.Sprintf("%.2fEB", b/EB)
+ return fmt.Sprintf("%.2fEB", float64(b/EB))
case b >= PB:
- return fmt.Sprintf("%.2fPB", b/PB)
+ return fmt.Sprintf("%.2fPB", float64(b/PB))
case b >= TB:
- return fmt.Sprintf("%.2fTB", b/TB)
+ return fmt.Sprintf("%.2fTB", float64(b/TB))
case b >= GB:
- return fmt.Sprintf("%.2fGB", b/GB)
+ return fmt.Sprintf("%.2fGB", float64(b/GB))
case b >= MB:
- return fmt.Sprintf("%.2fMB", b/MB)
+ return fmt.Sprintf("%.2fMB", float64(b/MB))
case b >= KB:
- return fmt.Sprintf("%.2fKB", b/KB)
+ return fmt.Sprintf("%.2fKB", float64(b/KB))
}
- return fmt.Sprintf("%.2fB", b)
+ return fmt.Sprintf("%.2fB", float64(b))
}
</pre>
<p>
+(The <code>float64</code> conversions prevent <code>Sprintf</code>
+from recurring back through the <code>String</code> method for
+<code>ByteSize</code>.)
The expression <code>YB</code> prints as <code>1.00YB</code>,
while <code>ByteSize(1e13)</code> prints as <code>9.09TB</code>.
</p>