我有一个时间字符串,格式是HHMM,我需要得到它的小数,我该怎么办?
e.g。
'1221'= 1221
'0101'= 101
'0011'= 11
'0001'= 1
如果字符串以“0x”开头,则基数为16(十六进制)
如果字符串以“0”开头,则基数为8(八进制)。
但无论是从0还是00或000开始,我都希望将其视为小数。
附加:
谢谢大家。
我知道你说了什么,让我感到困惑的是:
var temp1 = 0300; var temp2 ='0300';
parseInt函数(temp1,10)= 192; parseInt函数(temp1,10)= 300;
所以我怀疑是parseInt()并且有这个问题。
答案 0 :(得分:6)
使用parseInt()
并自行指定基数。
parseInt("10") // 10
parseInt("10", 10) // 10
parseInt("010") // 8
parseInt("10", 8) // 8
parseInt("0x10") // 16
parseInt("10", 16) // 16
注意:您应该始终提供可选的radix参数,因为如果没有提供,parseInt将尝试自己解决它。这可能会导致一些非常奇怪的行为。
的更新强>
这有点像黑客。但请尝试使用String
对象:
var s = "0300";
parseInt(s, 10); // 300
这个hack的缺点是你需要指定一个字符串变量。以下示例都不起作用:
parseInt(0300 + "", 10); // 192
parseInt(0300.toString(), 10); // 192
parseInt(Number(0300).toString(), 10) // 192
答案 1 :(得分:2)
您可以将基数参数提供给parseInt()
:
var x = '0123';
x = parseInt(x, 10); // x == 123
答案 2 :(得分:2)
如果要将其保留为字符串,可以使用正则表达式:
num = num.replace(/^0*/, "");
如果你想把它变成一个数字,roosteronacid有正确的代码。
答案 3 :(得分:0)
Number("0300") = Number(0300) = 300
答案 4 :(得分:0)
此处的解决方案:
function parse_int(num) {
var radix = 10;
if (num.charAt(0) === '0') {
switch (num.charAt(1)) {
case 'x':
radix = 16;
break;
case '0':
radix = 10;
break;
default:
radix = 8;
break;
}
return parseInt(num, radix);
}
var num8 = '0300';
var num16 = '0x300';
var num10 = '300';
parse_int(num8); // 192
parse_int(num16); // 768
parse_int(num10); // 300