前几天我在求职面试中被问到这个问题。我想"这很容易我只使用parseFloat()。"然后面试官说我不允许使用parseFloat()。我不得不手动进行转换而不使用函数为我做转换。
因此,如果您知道如何在不使用parseFloat的情况下将十进制字符串" 875.43"转换为JavaScript中的数字,请告诉我。
谢谢你, CM
答案 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)
答案 3 :(得分:0)
一元加:
var str = "875.43";
console.log( str, typeof str )
console.log( +str, typeof +str )