diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-05-31 17:16:59 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-05-31 17:16:59 -0700 |
commit | 642b9c8c6a47cedda72099cf0f28f1793f973f33 (patch) | |
tree | 40d47b2da9b6025f3cc0f72266a19ba3e747c7f0 /src/library.js | |
parent | aceedc8636fd4fd4c1df95a64176e07a425a435d (diff) |
make strtod properly handle .5 etc
Diffstat (limited to 'src/library.js')
-rw-r--r-- | src/library.js | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/library.js b/src/library.js index 1cb4dd2a..fe6ae0fb 100644 --- a/src/library.js +++ b/src/library.js @@ -3473,35 +3473,37 @@ LibraryManager.library = { var chr; var ret = 0; - var legit = false; // Get whole part. + var whole = false; while(1) { chr = {{{ makeGetValue('str', 0, 'i8') }}}; if (!_isdigit(chr)) break; - legit = true; + whole = true; ret = ret*10 + chr - '0'.charCodeAt(0); str++; } - if (!legit) { - {{{ makeSetValue('endptr', 0, 'origin', '*') }}} - return 0; - } - // Get fractional part. + var fraction = false; if ({{{ makeGetValue('str', 0, 'i8') }}} == '.'.charCodeAt(0)) { str++; var mul = 1/10; while(1) { chr = {{{ makeGetValue('str', 0, 'i8') }}}; if (!_isdigit(chr)) break; + fraction = true; ret += mul*(chr - '0'.charCodeAt(0)); mul /= 10; str++; } } + if (!whole && !fraction) { + {{{ makeSetValue('endptr', 0, 'origin', '*') }}} + return 0; + } + // Get exponent part. chr = {{{ makeGetValue('str', 0, 'i8') }}}; if (chr == 'e'.charCodeAt(0) || chr == 'E'.charCodeAt(0)) { |