Отдел в VB.NET

В чем разница между / и \ для деления на VB.NET?

Мой код дает очень разные ответы, в зависимости от того, что я использую. Я видел оба раньше, но я никогда не знал разницы.

4 ответа

Существует два способа разделить числа. Быстрый путь и медленный путь. Многие компиляторы пытаются обмануть вас в этом быстро. С# - один из них, попробуйте следующее:

using System;
class Program {
 static void Main(string[] args) {
 Console.WriteLine(1 / 2);
 Console.ReadLine();
 }
}

Выход: 0

Вы довольны результатом? Это технически корректное, документированное поведение, когда левая и правая части выражения являются целыми числами. Это делает быстрое целочисленное деление. Инструкция IDIV на процессоре, а не (печально известная) инструкция FDIV. Также полностью согласуется с тем, как работают все фигурные языки. Но определенно главный источник вопросов "wtf случилось" в SO. Чтобы получить счастливый результат, вам нужно будет сделать что-то вроде этого:

Console.WriteLine(1.0 / 2);

Выход: 0,5

Левая сторона теперь двойная, заставляя деление с плавающей запятой. С таким результатом показывает ваш калькулятор. Другие способы вызова FDIV - это сделать правую часть числа с плавающей запятой или явно лить один из операндов в (******).

VB.NET не работает таким образом, оператор / всегда - деление с плавающей запятой, независимо от типов. Иногда вам действительно требуется целочисленное деление. То, что делает \.


10 / 3 = 3.333
10 \ 3 = 3 (the remainder is ignored)


/ Division
\ Integer Division


10 / 3 = 3.33333333333333, assigned to integer = 3
10 \ 3 = 3, assigned to integer = 3
20 / 3 = 6.66666666666667, assigned to integer = 7
20 \ 3 = 6, assigned to integer = 6

Код для вышесказанного:

Dim a, b, c, d As Integer
a = 10 / 3
b = 10 \ 3
c = 20 / 3
d = 20 \ 3
Debug.WriteLine("10 / 3 = " & 10 / 3 & ", assigned to integer = " & a)
Debug.WriteLine("10 \ 3 = " & 10 \ 3 & ", assigned to integer = " & b)
Debug.WriteLine("20 / 3 = " & 20 / 3 & ", assigned to integer = " & c)
Debug.WriteLine("20 \ 3 = " & 20 \ 3 & ", assigned to integer = " & d)

licensed under cc by-sa 3.0 with attribution.