代码之家  ›  专栏  ›  技术社区  ›  delliottg

如何测试多个小数点?

  •  0
  • delliottg  · 技术社区  · 6 年前

    我正在为一个应该返回浮点的函数编写单元测试。我试图阻止某人向函数发送一组字符(注意我没有说string),比如 3.2.1 . 如果我对这个“数字”使用常规测试,它们似乎都失败了:

    Uncaught SyntaxError: missing ) after argument list .

    • var result = isNaN(3.2.1); //同样的错误
    • var result = parseFloat(3.2.1); //应为NaN,但改为获取错误
    • var result = typeof 3.2.1 === 'number'

    我想我可以用引号将其括起来,并将其作为字符串进行测试(当谓词是字符串时,上面的所有测试都按预期工作)。

    各种各样的问题没有回答这个问题:

    所以,真正的问题是 :如何测试具有多个小数点的“数字”并拒绝它?

    以下是大多数测试成功运行的实际代码:

    /**
    * 
    * @param {*} value 
    * Converts a numeric string value to a float for use by a timeout interval
    * datatype: ParseTimeoutInterval(string)
    * example: ParseTimeoutInterval('2.5')
    * return type: float
    * return example: 2.5
    */
    SerialWidget.prototype.ParseTimeoutInterval = function (value) {
    
    try {
        var self = this;
    
        self.CallListeners('debug', 'ParseTimeoutInterval: value = ' + value);
    
        if (value) {
            var result = parseFloat(value);
            if(result < 0 || isNaN(result)){
                self.CallListeners('debug', 'ParseTimeoutInterval: value is negative or NaN');
                return null;            
            }
        return result.toPrecision(2);
    
        } else {
            return null;    
        }
        self.CallListeners('debug', 'ParseTimeoutInterval: value is not a number');
        return null;
    
    } catch (ex) {
        self.OnError('ParseTimeoutInterval', ex.message);
    }
    };
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   mccambridge    6 年前

    假设您擅长检查字符串,那么可以将其拆分为一个数组并检查长度。

    var badNumber = '3.2.1';
    if (badNumber.split('.').length > 2) {
        console.error('uh oh. THAT\'s not a number!');
    } else {
        // proceed
    }