2009-12-23 32 views
22

Nếu bạn tạo các dự án mới trong C# và VB.NET, sau đó đi trực tiếp trong cửa sổ Immediate và gõ này:Tại sao các toán tử phân chia (/) hoạt động khác trong VB.NET và C#?

? 567/1000 

C# sẽ trở về 0, trong khi VB.NET sẽ trở lại 0,567.

Để có được kết quả tương tự trong C#, bạn cần phải gõ

? 567/1000.0 

Tại sao lại có sự khác biệt này? Tại sao C# yêu cầu dấu thập phân rõ ràng sau 1000?

+4

Tuyệt vời! Bạn nhập "/" vào chỉ mục MSDN, chọn "/ toán tử [C#]" và đọc từ câu thứ 3: Khi bạn chia hai số nguyên, kết quả luôn là số nguyên. Ví dụ, kết quả của 5/2 là 2. Để xác định phần còn lại của 5/2, sử dụng toán tử modulo (%). Để có được thương như một số hoặc phân số hợp lý, hãy đặt loại cổ tức hoặc số chia cho số dư hoặc loại gấp đôi. Bạn có thể làm điều này một cách ngầm định bằng cách đặt một dấu thập phân sau số, như trong ví dụ sau. Tôi không thể tin rằng có ai đó bỏ phiếu cho một câu hỏi như vậy, trả lời và bỏ phiếu cho câu trả lời. –

+7

DTashkinov: Rõ ràng, bạn nên đọc Câu hỏi thường gặp về StackOverflow. –

+3

@Dtashkinov Tôi đồng ý 100%. Tìm kiếm và học tập cơ bản không còn được mong đợi nữa. Đăng bất cứ điều gì bạn thích và bỏ phiếu. Thiếu một dấu chấm phẩy? Không có vấn đề chỉ cần đăng nó trên stackoverflow chúng tôi có thể giúp bạn. Nó là ridiculious! – JonH

Trả lời

33

/ operator in C# cho toán hạng số nguyên thực hiện thao tác "phân chia số nguyên" (tương đương với \ operator in VB.NET). Đối với VB.NET, đó là bộ phận "bình thường" (sẽ cho kết quả phân số). Trong C#, để thực hiện điều đó, bạn sẽ phải tạo ít nhất một toán hạng cho một loại dấu phẩy động (ví dụ: double) một cách rõ ràng.

+3

Đoán của tôi là lý do này khác với VB (từ C#), bởi vì VB.Net ban đầu được chỉ định giữ lại càng nhiều cú pháp tương tự VB6 càng tốt, để không xa lánh cơ sở người dùng VB6 lớn tồn tại thời gian. Và đó là cách nó hoạt động trong VB6. –

+0

@Charles: Vâng, cả hai ngôn ngữ đều có di sản lâu dài: Cách C# hoạt động là cách C hoạt động và tôi chắc chắn/và \ toán tử hành xử theo cách này ít nhất kể từ ngày QBasic (tôi đoán * đây là trường hợp từ trước đó BASIC nhưng đó là điều đầu tiên tôi làm việc với). –

+4

Chỉ trong trường hợp áp phích cần biết cách thực hiện, trong C#: 567.0/1000.0; hoặc (gấp đôi) 567/1000; hoặc thậm chí 567/(gấp đôi) 1000; sẽ cung cấp cho bạn những gì bạn cần. Miễn là một trong những con số là gấp đôi, nó sẽ thực hiện phân chia điểm nổi. – BlueTrin

11

Bởi vì trong VB.NET, toán tử / được xác định để trả lại kết quả dấu phẩy động. Nó mở rộng đầu vào của nó để double và thực hiện việc phân chia. Trong C#, toán tử / thực hiện phân chia số nguyên khi cả hai đầu vào là số nguyên.

Xem MSDN cho VB.NET.

Chia hai số và trả về kết quả dấu phẩy động.

Trước khi phân chia được thực hiện, bất kỳ biểu thức số nguyên nào được mở rộng thành Đôi.

Xem MSDN cho C#.

Toán tử phép chia (/) chia toán hạng đầu tiên cho lần thứ hai. Tất cả các kiểu số đều có toán tử phân chia được xác định trước.

Khi bạn chia hai số nguyên, kết quả luôn là số nguyên.

Để nhận cùng ngữ nghĩa trong VB.NET dưới dạng toán tử / trên số nguyên trong C#, hãy sử dụng \ operator.

Chia hai số và trả về kết quả nguyên.

2

Các ngôn ngữ khác nhau. Trong C# trình biên dịch diễn giải các số đó dưới dạng số nguyên và sử dụng phân chia số nguyên. Trong VB.NET trình biên dịch sử dụng phân chia dấu phẩy động.

3

Theo mặc định C# đang xử lý 576/1000 dưới dạng số nguyên để bạn nhận được số nguyên là kết quả.

Trong VB.NET, nó coi nó là phân chia dấu phẩy động.

Bằng cách thêm ".0" vào một số trong C#, bạn nói rõ rằng số này là số dấu phẩy động và do đó phân chia sẽ trở thành dấu phẩy động.

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