2012-06-20 48 views
5

Tôi đang tính toán trong tập lệnh java nhưng tôi đang gặp phải sự cố do độ chính xác trong số thập phân. tôi không thể đăng việc tính toán chính xác, nhưng đây là những gì tôi đang làm dẫn đến một kết quả bất ngờKết quả bất ngờ Javascript

Khi tôi viết: alert(100.01-36.01); kết quả // là 64

Nhưng khi tôi viết: alert(100.01-37.01); // dẫn là 63.00000000000001

và nó cứ như thế này cho 38.01 .... vv. Có thể giúp tôi giải thích tại sao điều này cho thấy một hành vi bất ngờ như vậy không. Tôi bị kẹt trong một phép tính.

Xin cảm ơn trước.

+2

Máy không có độ chính xác vô hạn, vì vậy người ta phải luôn cẩn thận khi so sánh giá trị dấu phẩy động, 64 là số đặc biệt cho máy, sức mạnh của nó là 2 để nó có thể đại diện cho nó khá tốt. –

+1

điều này có thể giúp bạn http://stackoverflow.com/questions/588004/is-javascripts-math-broken –

+2

Điều này đã được hỏi ít nhất một triệu lần trên SO, vui lòng sử dụng tìm kiếm trước khi đăng câu hỏi. – Niko

Trả lời

1

Hãy thử điều này:

 
<script type="text/javascript"> 
var n1 = parseFloat(100.01); 
var n2 = parseFloat(37.01); 
var res = (n1-n2) 
alert(res.toFixed(2)); 
</script> 
0

nếu bạn không khai báo những con số như số, js sẽ tự động sử dụng nó như là chuỗi, nếu chuỗi không chỉ được sử dụng bởi con số.

parseFloat (123.45) sẽ đặt làm số thập phân.

Các vấn đề liên quan