比较qml字符串“ 10”和“ 9”

时间:2019-11-29 11:46:08

标签: string qt qml compare

我尝试比较qml字符串“ 10”比“ 9”大,但是console.log向我发送了错误消息

console.log("10" > "9");

控制台输出为假

qml: false

向我解释为什么这行不通

3 个答案:

答案 0 :(得分:1)

  

向我解释为什么这行不通

这实际上是一个JavaScript问题,因为这是QML处理器使用的语言。您是comparing个字符串,而不是数字。 Here's a good explanation的JavaScript字符串(通常)比较。

我将引用相关部分并给出我自己的示例:

  

要查看一个字符串是否大于另一个字符串,JavaScript使用所谓的“字典”或“词典顺序”。换句话说,字符串是按字母进行比较的。

     

比较两个字符串的算法很简单:

     
      
  1. 比较两个字符串的第一个字符。
  2.   
  3. 如果第一个字符串中的第一个字符大于(或小于)另一个字符串,则第一个字符串大于(或小于)第二个字符串。完成了。
  4.   
  5. 否则,如果两个字符串的第一个字符相同,则以相同的方式比较第二个字符。
  6.   
  7. 重复直到任一字符串的结尾。
  8.   
  9. 如果两个字符串以相同的长度结尾,则它们相等。否则,较长的字符串会更大。
  10.   

console.log("10" > "9");    // false, first character is smaller
console.log("9" > "8");     // true, first character is larger
console.log("9" > "08");    // true, first char. is larger
console.log("10" > "09");   // true, first char. is larger
console.log("100" > "11");  // false, second char. is smaller

答案 1 :(得分:0)

如果您知道字符串始终都是整数(假设它们将来自某个变量),则可以更改代码以解析它们,并且比较将正常进行:

console.log(parseInt("10") > parseInt("9"));

答案 2 :(得分:0)

您可以使用以下解决方法:

console.log("10"*1 > "9"*1); // true

如果要使用parseInt,请注意radix参数。在上一个示例中,没有基数参数,因此解释器将退回到默认行为,该行为通常将数字视为十进制,除非它们以零(八进制)或0x(十六进制)开头