2012-01-23 37 views
15

Tôi là người mới lập trình và đang gặp sự cố với lỗi tràn Cint. Bất cứ khi nào giá trị đạt đến 100.000+ tôi nhận được lỗi tràn Cint. Đây là một bài tập thực hành trong phần giới thiệu của tôi cho lớp lập trình. Theo tôi có thể thấy tôi đã mã hóa chính xác nó đã được thực hiện như thế nào trong thực tế, nhưng thực tế cho thấy sử dụng các giá trị cao tới 300.000. Ai đó có thể giải thích những gì tôi có thể làm sai?Lỗi tràn Cint khi giá trị vượt quá 100.000+

<script language="VBscript"> 
Option Explicit 
DIM numberofshifts, totalshift1, totalshift2, _ 
    totalshift3, grandtotal, shiftaverage 
numberofshifts=3 
totalshift1 = Inputbox("How many widgets during the first shift") 
totalshift2 = Inputbox("How many widgets during the second shift") 
totalshift3 = Inputbox("How many widgets during the third shift") 
grandtotal = cint(totalshift1) + totalshift2 + totalshift3 
shiftaverage = grandtotal/numberofshifts 
Document.write "The Total of the Three Shifts is " & grandtotal 
Document.write "<br>The Average of the Three Shifts is " & shiftaverage 
</script> 

Trả lời

31

CInt có thể xử lý betweeen -32,768 và 32,767.

Sử dụng CLng thay vì CInt.

MSDN Reference

+2

Để tham khảo: [Loại dữ liệu VBScript] (http://msdn.microsoft.com/en-us/library/9e7a57cf%28VS.84%29.aspx) –

1

Chuyển đổi dữ liệu chuỗi số nguyên có thể được thực hiện bằng cách sử dụng CInt() CLng() hoặc CDbl(). Điều quan trọng là phải nhớ giới hạn kích thước của các loại dữ liệu này. Các ngôn ngữ lập trình khác nhau có những giới hạn khác nhau.
Here is a link to VBScript Data Types.

Số nguyên có thể xử lý các số nguyên từ -32,768 đến 32,767. Dài có thể xử lý các số nguyên từ -2,147,483,648 đến 2,147,483,647. Nhân đôi có thể xử lý các con số lên tới 1.79769313486232E + 308, (Đó là một số lớn hơn số nguyên tử trong Mặt Trời, tức là 1,19 octodecillion.) Chúng cũng là hai điểm chính xác nổi; có nghĩa là một đôi cũng có thể xử lý các điểm thập phân cực kỳ chính xác.

grandtotal = cdbl(totalshift1) + totalshift2 + totalshift3 

Điều này sẽ loại bỏ vấn đề tràn. Nó sẽ không xử lý lỗi nếu người dùng nhập một số không, nhưng đó là một chủ đề khác.

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và sau khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [nhận xét về bài đăng bất kỳ] (http://stackoverflow.com/help/privileges/comment). – emmanuel

+0

Câu trả lời này hoàn toàn là câu hỏi. Tôi đã viết một kịch bản, trong số những thứ khác, thu thập dữ liệu thông qua mạng nội bộ của chúng tôi và tính toán RAM trên các máy miền. Lần thử đầu tiên của tôi là CInt. Điều đó gây ra một tràn. Sau đó tôi tìm thấy câu trả lời này từ Romeo và thử CLng. Điều đó cũng tràn ngay lập tức. Dữ liệu tiếp theo bước lên từ dài là gấp đôi, vì vậy tôi đã thử CDbl và nó hoạt động. Đó là một câu trả lời tốt hơn cho câu hỏi so với câu hỏi được đưa ra, vì vậy bạn không chính xác trong việc đánh giá câu trả lời của tôi. –

+0

OK. Cảm ơn sự giúp đỡ của bạn. –

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