使用JavaScript手动将十进制字符串转换为数字

时间:2017-04-15 01:49:43

标签: javascript parsing casting

前几天我在求职面试中被问到这个问题。我想"这很容易我只使用parseFloat()。"然后面试官说我不允许使用parseFloat()。我不得不手动进行转换而不使用函数为我做转换。

因此,如果您知道如何在不使用parseFloat的情况下将十进制字符串" 875.43"转换为JavaScript中的数字,请告诉我。

谢谢你, CM

4 个答案:

答案 0 :(得分:0)

ECMA2017

let string = "875.43";
let number: Number = new Number(string);
console.log(typeof number);
console.log(number);

和第二种方式:

let number: Number = string as Number;

答案 1 :(得分:0)

面试官正在寻找您编写parseNumber的实施方案。

您将遍历数字并添加每个digit + currentValue * 10'。'然后添加每个数字乘以乘数digit * mult + currentValue; mult *= .1

function parseNumber(s) {
  var value = 0;
  var sign = 1;
  var beforeDecimal = true;
  var mult = .1;
  var ndx = 0;
  var len = s.length;
  
  if (s[0] === '-') {
    sign = -1;
    ndx = 1;
  }
  
  while (ndx < len) {
    var c = s[ndx];
    if (c === '.') {
      if (beforeDecimal) {
        beforeDecimal = false; 
      } else {
        // it's a second '.'. What to do? Error? Exit?
        break;
      }
    } else if (c >= '0' || c <= '9') {
      if (beforeDecimal) {
        value = value * 10 + c.charCodeAt(0) - 48; // 48 = '0'
      } else {
        value = value + c * mult;
        mult *= .1;
      }
    } else {
      // what to do? Error, Exit?
      break;
    }
    ++ndx;
  }
  
  return sign * value;
}

console.log(parseNumber("123"));
console.log(parseNumber("-123"));
console.log(parseNumber("123.456"));
console.log(parseNumber("-123.456"));
console.log(parseNumber("-.42"));
console.log(parseNumber(".42"));

这不会处理1E9之类的内容,也不会处理前面的+

您可以讨论将小数部分前后分开

function parseNumber(s) {
  var value = 0;
  var sign = 1;
  var mult = .1;
  var ndx = 0;
  var len = s.length;
  
  if (s[0] === '-') {
    sign = -1;
    ndx = 1;
  }
  
  // before decimal
  while (ndx < len) {
    var c = s[ndx++];
    if (c === '.') {
      break;
    } else if (c >= '0' || c <= '9') {
      value = value * 10 + c.charCodeAt(0) - 48; // 48 = '0'
    } else {
      // what to do? Error, Exit?
      break;
    }
  }
  
  // after decimal
  if (c === '.') {  // make sure we broke loop above for '.'
    while (ndx < len) {
      var c = s[ndx++];
      if (c >= '0' || c <= '9') {
          value = value + c * mult;
          mult *= .1;
      } else {
        // what to do? Error, Exit?
        break;
      }
    }
  }
  
  return sign * value;
}

console.log(parseNumber("123"));
console.log(parseNumber("-123"));
console.log(parseNumber("123.456"));
console.log(parseNumber("-123.456"));
console.log(parseNumber("-.42"));
console.log(parseNumber(".42"));

您可能还会考虑如何处理错误(返回NaN?),以及是否要实施parseInt处理the radix argument

答案 2 :(得分:0)

http://codepen.io/anon/pen/NjPJXg

<强> JS:

console.log(typeof ("875.43"/1));

<强>输出:

number

答案 3 :(得分:0)

一元加:

var str = "875.43";
console.log( str, typeof str )
console.log( +str, typeof +str )