Cyclone Cyclone - 4 months ago 26 Question

Division in VB.NET

What's the difference between

for division in VB.NET?

My code gives very different answers depending on which I use. I've seen both before, but I never knew the difference.


There are two ways to divide numbers. The fast way and the slow way. A lot of compilers try to trick you into doing it the fast way. C# is one of them, try this:

using System;

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

Output: 0

Are you happy with that outcome? It is technically correct, documented behavior when the left side and the right side of the expression are integers. That does a fast integer division. The IDIV instruction on the processor, instead of the (infamous) FDIV instruction. Also entirely consistent with the way all curly brace languages work. But definitely a major source of "wtf happened" questions at SO. To get the happy outcome you would have to do something like this:

    Console.WriteLine(1.0 / 2);

Output: 0.5

The left side is now a double, forcing a floating point division. With the kind of result your calculator shows. Other ways to invoke FDIV is by making the right-side a floating point number or by explicitly casting one of the operands to (double).

VB.NET doesn't work that way, the / operator is always a floating point division, irrespective of the types. Sometimes you really do want an integer division. That's what \ does.