diff options
author | max99x <max99x@gmail.com> | 2011-06-27 11:29:37 +0300 |
---|---|---|
committer | max99x <max99x@gmail.com> | 2011-06-27 11:29:37 +0300 |
commit | 6d6c9c4171fbb37dc2834d701fdb4497a7753da6 (patch) | |
tree | 59a956f465367dfe9021b5ce374c12f77febda87 | |
parent | 24f83c080f90dc440bd4981fc9ba5661b7bc28db (diff) |
Minor printf() bugfix.
-rw-r--r-- | src/library.js | 12 | ||||
-rw-r--r-- | tests/printf/output.txt | 10 | ||||
-rw-r--r-- | tests/printf/test.c | 10 |
3 files changed, 28 insertions, 4 deletions
diff --git a/src/library.js b/src/library.js index 97407a1f..19970840 100644 --- a/src/library.js +++ b/src/library.js @@ -314,6 +314,8 @@ var Library = { } } + var dropTrailingZeros = isGeneral && !flagAlternative; + // Round or pad a fractional part given the current precision. var applyPrecision = function(fractionPart) { if (precision == 0) { @@ -324,12 +326,12 @@ var Library = { while (fractionPart.length < precision) { fractionPart = '0' + fractionPart; } - } else { + } else if (!dropTrailingZeros) { while (fractionPart.length < precision) { fractionPart += '0'; } } - if (isGeneral && !flagAlternative) { + if (dropTrailingZeros) { while (fractionPart[fractionPart.length - 1] == '0') { fractionPart = fractionPart.slice(0, -1); } @@ -361,10 +363,12 @@ var Library = { fractionPart = ''; } parts.push(wholePart || '0'); + fractionPart = applyPrecision(fractionPart); if (fractionPart) { parts.push('.'); - fractionPart = applyPrecision(fractionPart); - if (parseInt(fractionPart, 10) > 0) parts.push(fractionPart); + if (!dropTrailingZeros || parseInt(fractionPart, 10) > 0) { + parts.push(fractionPart); + } } else if (flagAlternative) { parts.push('.'); } diff --git a/tests/printf/output.txt b/tests/printf/output.txt index dc3a875e..99e91e7f 100644 --- a/tests/printf/output.txt +++ b/tests/printf/output.txt @@ -13,6 +13,16 @@ INF -INF nan NAN +0 +0 +0.0 +0.00 +0.00000 +1 +1 +1.0 +1.00 +1.00000 1 12 123 diff --git a/tests/printf/test.c b/tests/printf/test.c index c862ae44..ac662dca 100644 --- a/tests/printf/test.c +++ b/tests/printf/test.c @@ -17,6 +17,16 @@ int main() { printf("%lF\n", -INFINITY); printf("%lf\n", NAN); printf("%lF\n", NAN); + printf("%.f\n", 0.0f); + printf("%.0f\n", 0.0f); + printf("%.1f\n", 0.0f); + printf("%.2f\n", 0.0f); + printf("%.5f\n", 0.0f); + printf("%.f\n", 1.0f); + printf("%.0f\n", 1.0f); + printf("%.1f\n", 1.0f); + printf("%.2f\n", 1.0f); + printf("%.5f\n", 1.0f); printf("%g\n", 1.f); printf("%g\n", 12.f); printf("%g\n", 123.f); |