xem xét mẫu mã sau:Tại sao Java 8 Nashorn (JavaScript) modulo trả về 0.0 (gấp đôi) thay vì 0 (số nguyên)?
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Tester {
public static void main(String[] args) throws Exception {
ScriptEngine se = new ScriptEngineManager().getEngineByName("nashorn");
Object eval = se.eval("5%5");
System.out.println("eval = " + eval);
System.out.println("eval.getClass() = " + eval.getClass());
}
}
Tại sao nó tạo ra đầu ra sau đây?
eval = 0,0
eval.getClass() = lớp java.lang.Double
Kiểu kết quả là java.lang.Double
đó là lạ.
Trong trường hợp số dư còn lại khác 0 thì trả về chính xác java.lang.Integer
, ví dụ: 5%2
trả về java.lang.Integer' with value
1`.
Chỉ 0 bằng cách nào đó là đặc biệt.
Đang cố gắng biểu thức JavaScript cùng trong Firefox 32.0.2 (FindBugs console) hoạt động tốt và trả về đồng bằng 0.
Có cách nào để buộc Nashorn trở Integer loại thay vì đúp?
JavaScript chỉ có loại số nổi. – Teemu
@Teemu cảm ơn thông tin của bạn, nhưng tại sao nó lại quan trọng ở đây? Bên trong nó có thể là một phao, nhưng bằng cách nào đó nó có thể 'đúc' nó thành số nguyên, ví dụ: '5% 2' tạo ra số nguyên 1. Tôi sẽ chấp nhận lời giải thích như vậy nếu tôi nhận được 1.0 trong trường hợp này. –
Firefox không phải là "truyền" bất cứ thứ gì. Nó chỉ là vấn đề làm thế nào nó hiển thị giá trị dấu phẩy động 1.0. –