我按照js代码写了一些dart代码,有一个问题,希望有人能帮助我/
js代码:
var max = 0x80000000;
var data = -2000;
var mod = data % max;mod值为-2000
Dart代码:
var max = 0x80000000;
var data = -2000;
var mod = data % max;mod值为2147481648
为什么?
发布于 2020-11-19 20:32:51
因为JavaScript和Dart是具有不同运算符规范的不同语言。
Dart指定余数运算结果始终为正:
https://api.dart.dev/stable/2.10.4/dart-core/num/operator_modulo.html
在JavaScript中,余数可以是负的,结果的符号等于被除数的符号:
https://www.ecma-international.org/ecma-262/11.0/index.html#sec-numeric-types-number-remainder
发布于 2020-11-20 00:01:09
Dart在整数上有two "modulo" operators,% (也称为.模)和remainder。
对于负操作数,它们的不同之处在于结果是取被除数还是除数的符号。对于正操作数,这两个操作数是一致的。
比较:
void main() {
for (var a in [5, -5]) {
for (var b in [3, -3]) {
print("$a ~/ $b = ${a ~/ b}");
print("$a % $b = ${a % b}");
print("$a.remainder($b) = ${a.remainder(b)}");
print("$a = $b * ($a ~/ $b) + $a.remainder($b) = ${b * (a ~/ b) + a.remainder(b)}");
}
}
}这段代码显示了所有的组合和一般的a == (a ~/ b) * b + a.remainder(b)。
https://stackoverflow.com/questions/64911104
复制相似问题