Отдел в VB.NET - PullRequest
       15

Отдел в VB.NET

14 голосов
/ 03 декабря 2010

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

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

Ответы [ 4 ]

19 голосов
/ 03 декабря 2010

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

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 голосов
/ 03 декабря 2010
10 / 3 = 3.333
10 \ 3 = 3 (the remainder is ignored)
5 голосов
/ 03 декабря 2010
/ Division
\ Integer Division
1 голос
/ 06 октября 2017
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)
...