【问题标题】:JavaScript to trim started 0 in a string用于修剪字符串中从 0 开始的 JavaScript
【发布时间】:2010-12-02 05:48:05
【问题描述】:

我有一个时间字符串,格式是HHMM,我需要得到它的小数,怎么办?

例如

'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() 并有这个问题。

【问题讨论】:

  • 啊。我觉得我明白了。 “temp1”是一个声明为 base8 的数字。 parseInt 对它没有任何作用,因为它是一个数字。 0300==192。但是,temp2 是一个字符串,前导 0 会被忽略,因为您已强制它解析为 base10。
  • 你的问题不再有意义。请更新它——就像现在一样;对任何人都没有用。

标签: javascript


【解决方案1】:

使用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

这个技巧的缺点是您需要指定一个字符串变量。以下示例均无效:

parseInt(0300 + "", 10);              // 192    
parseInt(0300.toString(), 10);        // 192    
parseInt(Number(0300).toString(), 10) // 192

【讨论】:

  • 我宁愿说:您需要指定基数。
  • @Gumbo - 当然这不是真的;P 你应该指定基数。
  • @Gumbo & anakata:你是对的。如果您不解析基数,该函数会尝试自行解决。这可能会导致一些非常奇怪的行为。
【解决方案2】:

如果你想把它保存为字符串,你可以使用正则表达式:

num = num.replace(/^0*/, "");

如果你想把它变成一个数字 roosteronacid 有正确的代码。

【讨论】:

  • 谢谢。我知道你说什么,是什么让我困惑如下: var temp1=0300; var temp2='0300'; parseInt(temp1,10)=192; parseInt(temp1,10)=300;所以我怀疑 parseInt() 并有这个问题。
【解决方案3】:

您可以将基数参数提供给parseInt()

var x = '0123';
x = parseInt(x, 10); // x == 123

【讨论】:

  • 这种情况下需要注意radix参数,结果可能出乎意料:parseInt('0x300', 16); => 768 parseInt('0x300', 8); => 0
【解决方案4】:
Number("0300") = Number(0300) = 300

【讨论】:

    【解决方案5】:

    解决办法:

    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
    

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多