В чем разница между /
и \
для деления в VB.NET?
Мой код дает очень разные ответы в зависимости от того, что я использую. Я видел оба раньше, но я никогда не знал разницы.
В чем разница между /
и \
для деления в VB.NET?
Мой код дает очень разные ответы в зависимости от того, что я использую. Я видел оба раньше, но я никогда не знал разницы.
Есть два способа деления чисел. Быстрый путь и медленный путь. Многие компиляторы пытаются заставить вас сделать это быстрее. С# — один из них, попробуйте следующее:
using System;
class Program {
static void Main(string[] args) {
Console.WriteLine(1 / 2);
Console.ReadLine();
}
}
Выход: 0
Вы довольны таким исходом? Это технически правильное, задокументированное поведение, когда левая и правая части выражения являются целыми числами. Это делает быстрое целочисленное деление. Инструкция IDIV на процессоре вместо (печально известной) инструкции FDIV. Также полностью соответствует тому, как работают все языки с фигурными скобками. Но определенно основной источник вопросов «что случилось» в SO. Чтобы получить счастливый результат, вам нужно сделать что-то вроде этого:
Console.WriteLine(1.0 / 2);
Выход: 0,5
Левая сторона теперь двойная, что приводит к делению с плавающей запятой. С тем результатом, который показывает ваш калькулятор. Другие способы вызвать FDIV — сделать правую часть числом с плавающей запятой или явным приведением одного из операндов к (double).
VB.NET так не работает, оператор / всегда является делением с плавающей запятой, независимо от типов. Иногда вам действительно действительно нужно целочисленное деление. Это то, что делает \
.
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)