aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormax99x <max99x@gmail.com>2011-06-27 11:29:37 +0300
committermax99x <max99x@gmail.com>2011-06-27 11:29:37 +0300
commit6d6c9c4171fbb37dc2834d701fdb4497a7753da6 (patch)
tree59a956f465367dfe9021b5ce374c12f77febda87
parent24f83c080f90dc440bd4981fc9ba5661b7bc28db (diff)
Minor printf() bugfix.
-rw-r--r--src/library.js12
-rw-r--r--tests/printf/output.txt10
-rw-r--r--tests/printf/test.c10
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);