| @@ -394,29 +394,32 @@ char *setsval(Cell *vp, const char *s) / | | | @@ -394,29 +394,32 @@ char *setsval(Cell *vp, const char *s) / |
394 | | | 394 | |
395 | return(vp->sval); | | 395 | return(vp->sval); |
396 | } | | 396 | } |
397 | | | 397 | |
398 | Awkfloat getfval(Cell *vp) /* get float val of a Cell */ | | 398 | Awkfloat getfval(Cell *vp) /* get float val of a Cell */ |
399 | { | | 399 | { |
400 | if ((vp->tval & (NUM | STR)) == 0) | | 400 | if ((vp->tval & (NUM | STR)) == 0) |
401 | funnyvar(vp, "read value of"); | | 401 | funnyvar(vp, "read value of"); |
402 | if (isfld(vp) && !donefld) | | 402 | if (isfld(vp) && !donefld) |
403 | fldbld(); | | 403 | fldbld(); |
404 | else if (isrec(vp) && !donerec) | | 404 | else if (isrec(vp) && !donerec) |
405 | recbld(); | | 405 | recbld(); |
406 | if (!isnum(vp)) { /* not a number */ | | 406 | if (!isnum(vp)) { /* not a number */ |
407 | vp->fval = atof(vp->sval); /* best guess */ | | 407 | if (is_number(vp->sval) && !(vp->tval&CON)) { |
408 | if (is_number(vp->sval) && !(vp->tval&CON)) | | 408 | vp->fval = atof(vp->sval); /* best guess */ |
409 | vp->tval |= NUM; /* make NUM only sparingly */ | | 409 | vp->tval |= NUM; /* make NUM only sparingly */ |
| | | 410 | } else { |
| | | 411 | vp->fval = 0; |
| | | 412 | } |
410 | } | | 413 | } |
411 | dprintf( ("getfval %p: %s = %g, t=%o\n", | | 414 | dprintf( ("getfval %p: %s = %g, t=%o\n", |
412 | (void*)vp, NN(vp->nval), vp->fval, vp->tval) ); | | 415 | (void*)vp, NN(vp->nval), vp->fval, vp->tval) ); |
413 | return(vp->fval); | | 416 | return(vp->fval); |
414 | } | | 417 | } |
415 | | | 418 | |
416 | static char *get_str_val(Cell *vp, char **fmt) /* get string val of a Cell */ | | 419 | static char *get_str_val(Cell *vp, char **fmt) /* get string val of a Cell */ |
417 | { | | 420 | { |
418 | char s[256]; | | 421 | char s[256]; |
419 | double dtemp; | | 422 | double dtemp; |
420 | | | 423 | |
421 | if ((vp->tval & (NUM | STR)) == 0) | | 424 | if ((vp->tval & (NUM | STR)) == 0) |
422 | funnyvar(vp, "read value of"); | | 425 | funnyvar(vp, "read value of"); |