tags:

views:

678

answers:

5

If you create new projects in C# and VB.NET, then go directly in the Immediate Window and type this:

? 567 / 1000

C# will return 0, while VB.NET will return 0.567.

To get the same result in C#, you need to type

? 567 / 1000.0

Why is there this difference? Why does C# require the explicit decimal point after 1000?

+16  A: 

The / operator in C# for integer operands does the "integer division" operation (equivalent to \ operator in VB.NET). For VB.NET, it's the "normal" division (will give fractional result). In C#, in order to do that, you'll have to cast at least one operand to a floating point type (e.g. double) explicitly.

Mehrdad Afshari
thanks (chars15)
Fredou
My guess is that the reason this is different in VB (from C#), is because VB.Net was originally spec'd to retain as much syntactical similarilty to VB6 as possible, so as not alienate the large VB6 user base that existed at the time. And that's the way it worked in VB6.
Charles Bretana
@Charles: Yeah, both languages have a long heritage: The way C# works is the way C works and I'm sure / and \ operators behaved this way at least since QBasic days (I *guess* this was the case since earlier BASICs but that's the first thing I've worked with).
Mehrdad Afshari
Just in case the poster needed to know how to do it, in C#: 567.0 / 1000.0;or (double)567 / 1000;or even 567 / (double)1000;will give you what you need.As long as one of the numbers is a double it will perform floating point division.
BlueTrin
+6  A: 

Because in VB.NET, the / operator is defined to return a floating-point result. It widens its inputs to double and performs the division. In C#, the / operator performs integer division when both inputs are integers.

See MSDN for VB.NET.

Divides two numbers and returns a floating-point result.

Before division is performed, any integral numeric expressions are widened to Double.

See MSDN for C#.

The division operator (/) divides its first operand by its second. All numeric types have predefined division operators.

When you divide two integers, the result is always an integer.

To get the same semantics in VB.NET as the / operator on integers in C#, use the \ operator.

Divides two numbers and returns an integer result.

Jason
+2  A: 

The languages are different. In C# the compiler interprets those numbers as integers and uses integer division. In VB.NET the compiler uses floating point division.

Brian Ensink
+3  A: 

By default C# is treating 576 / 1000 as integer division so you get an integer as the result.

In VB.NET it's treating it as floating point division.

By adding ".0" on a number in C# you are explicitly telling it this number is a floating point number and hence the division becomes floating point as well.

Paolo
+2  A: 

C# Language Reference

VB.Net Language Reference

VB.Net has both a / and a \ operator. / happens to be the floating point division operator.

Benjamin Podszun