/* gobal variables */
char *progname = NULL;
+int precision = 6;
/* help function */
int fd = ret ? stdfderr : stdfdout;
fdprintf (fd, "usage: %s\n", progname);
fdprintf (fd, " -h : help message\n");
+ fdprintf (fd, " -p : precision (%d)\n", precision);
fdprintf (fd, " -v : verbose level (%d)\n", verbose);
return ret;
}
char c = arg[1];
switch (c) {
+ case 'p':
+ arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+ if (arg == NULL) {
+ PRINTERR ("%s: missing precision\n", progname);
+ return usage (1);
+ }
+ precision = atoi (arg);
+ break;
case 'v':
arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
if (arg == NULL) {
return usage (c != 'h');
}
}
+
+ /* format */
+ char format[8] = "=> %.f\n";
+ format[4] = '0' + precision;
/* read from input stream */
ret = 1;
} else {
VERBOSE (INFO, print_element (element, 0));
- PRINTOUT ("=> %f\n", evaluate_element (element, 0));
+ PRINTOUT (format, evaluate_element (element, 0));
delelement (element);
ret = 0;
}
// test: echo "2 + * 3" | calc.exe | grep -q 'error'
// test: echo "sqrt 2" | calc.exe | grep -q 'error'
// test: echo "pow (2)" | calc.exe | grep -q 'error'
+// test: echo "1.23456789" | calc.exe -p 3 | grep -q '1\.234'
/* vim: set ts=4 sw=4 et: */
*str++ = '-';
f = -f;
}
- t = getexponant (&f, -6);
+ if (sz == 0) sz = 6;
+ t = getexponant (&f, -sz);
u = (int)f;
str = itoa (str, u, 0);
- d = (int)((f - u) * tenpower (6));
+ d = (int)((f - u) * tenpower (sz));
if (d > 0) {
*str++ = '.';
- str = itoa (str, d, 6);
+ str = itoa (str, d, sz);
}
while (*(str - 1) == '0') {
str--;