为什么波浪号出现在负数上(例如 ~~-1)return 184467440737... 在 MySql 查询中

Why tilde on negative number(eg ~~-1) return 184467440737... in MySql query

我刚刚找到了一种我认为在某些编程语言中使用双波浪号 ~~ 删除小数点更简单快捷的方法。

我很好奇波浪号是什么意思,然后我从this answer:

找到了

The operator ~ is a binary negation operator (as opposed to boolean negation), and being that, it inverses all the bits of its operand. The result is a negative number in two's complement arithmetic.

该答案适用于 PHP 语言,我认为 MySQL 也是如此。我想我可以使用 ~ 恢复否定(也删除小数)和 ~~ 只删除小数

我试过 PHP 和 JS:

单波浪号:

    ~-1 // = 1
    ~1 // = -1
    ~-1.55 // = 1
    ~1.55 // = -1

双波浪号:

    ~~-1 // = -1
    ~~1 // = 1
    ~~1.55 // = 1
    ~~-1.55 // = -1

但为什么我在 MySQL 中尝试显示不同的结果:

select ~1; // 18446744073709551614
select ~-1; // 0
select ~-111; // 110
select ~1.55; // 18446744073709551613
select ~-1.55; // 1
select ~~1; // 1
select ~~-1; // 18446744073709551615
select ~~1.55; // 2
select ~~-1.55; // 18446744073709551614

从上面的查询中,我可以得出结论,如果 ~~ 可用于删除正数的小数(四舍五入),但不适用于负数(将 return 18446744073...)。而且我不知道~在MySQL中的用法。谁能给我解释一下?

“...更快地删除小数点...”- 不要在这个级别进行优化。坚持SQL.

的整体结构

要将浮点值转换为整数,请使用函数:

mysql> SELECT FLOOR(12.7), CEIL(12.7), ROUND(12.7), ROUND(12.777, 2), FORMAT(1234.7, 0)\G
*************************** 1. row ***************************
      FLOOR(12.7): 12
       CEIL(12.7): 13
      ROUND(12.7): 13
 ROUND(12.777, 2): 12.78
FORMAT(1234.7, 0): 1,235

至于~对浮点数的作用,我们需要进入IEEE-754标准。但是你的眼睛可能会呆滞。