В чем разница между /
и \
для деления на VB.NET?
Мой код дает очень разные ответы, в зависимости от того, что я использую. Я видел оба раньше, но я никогда не знал разницы.
В чем разница между /
и \
для деления на VB.NET?
Мой код дает очень разные ответы, в зависимости от того, что я использую. Я видел оба раньше, но я никогда не знал разницы.
Существует два способа разделить числа. Быстрый путь и медленный путь. Многие компиляторы пытаются обмануть вас в этом быстро. С# - один из них, попробуйте следующее:
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 - это сделать правую часть числа с плавающей запятой или явно лить один из операндов в (double).
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)
хмммммммммм хитрый один как насчет попробовать включить и выключить