2009-12-23 12 views
22

Si crea nuevos proyectos en C# y VB.NET, y luego ir directamente en la ventana Inmediato y escriba esto:¿Por qué los operadores de división (/) se comportan de manera diferente en VB.NET y C#?

? 567/1000 

C# devolverá 0, mientras que VB.NET volverá 0,567.

Para obtener el mismo resultado en C#, se necesita escribir

? 567/1000.0 

¿Por qué existe esta diferencia? ¿Por qué C# requiere el punto decimal explícito después de 1000?

+4

¡Increíble! Escribe "/" en el índice de MSDN, selecciona "/ operator [C#]" y lee desde la tercera oración: Cuando divides dos enteros, el resultado es siempre un entero. Por ejemplo, el resultado de 5/2 es 2. Para determinar el resto de 5/2, use el operador de módulo (%). Para obtener un cociente como un número o fracción racional, ingrese el tipo de dividendo o divisor flotante o escriba doble. Puede hacer esto implícitamente poniendo un punto decimal después del número, como se muestra en el siguiente ejemplo. No puedo creer que haya alguien que vota por esa pregunta, responde y vota por respuestas al respecto. –

+7

DTashkinov: Aparentemente, debería leer las preguntas frecuentes de StackOverflow. –

+3

@Dtashkinov Estoy de acuerdo 100%. La búsqueda básica y el aprendizaje ya no se espera. Publica lo que quieras y vota. ¿Falta un punto y coma? No hay problema solo publíquelo en stackoverflow, podemos ayudarlo. ¡Es ridículo! – JonH

Respuesta

33

Los / operator in C# para operandos enteros hace la operación "número entero división" (equivalente a \ operator in VB.NET). Para VB.NET, es la división "normal" (dará resultado fraccionario). En C#, para hacer eso, deberá lanzar al menos un operando a un tipo de coma flotante (por ejemplo, double) explícitamente.

+3

Supongo que la razón por la que esto es diferente en VB (de C#) es porque VB.Net fue originalmente diseñado para retener la misma sintaxis similar a VB6 como sea posible, para no alienar a la gran base de usuarios de VB6 que existía en el tiempo. Y así es como funcionó en VB6. –

+0

@Charles: Sí, ambos lenguajes tienen una larga tradición: la forma en que C# funciona es la forma en que C funciona y estoy seguro de que/y \ operadores se comportaron de esta manera al menos desde QBasic days (supongo * que este fue el caso desde antes BÁSICOS pero eso es lo primero con lo que he trabajado). –

+4

Por si acaso el póster necesitaba saber cómo hacerlo, en C#: 567.0/1000.0; o (doble) 567/1000; o incluso 567/(doble) 1000; le dará lo que necesita. Mientras uno de los números sea un doble, realizará una división de punto flotante. – BlueTrin

11

Porque en VB.NET, el operador / se define para devolver un resultado de coma flotante. Amplía sus entradas a double y realiza la división. En C#, el operador / realiza una división de enteros cuando ambas entradas son números enteros.

Consulte MSDN para VB.NET.

Divide dos números y devuelve un resultado de coma flotante.

Antes de realizar la división, cualquier expresión numérica integral se amplía a Doble.

Consulte MSDN para C#.

El operador de división (/) divide su primer operando por su segundo. Todos los tipos numéricos tienen operadores de división predefinidos.

Cuando divide dos enteros, el resultado siempre es un número entero.

Para obtener la misma semántica en VB.NET como el operador / en números enteros en C#, utilice el \ operator.

Divide dos números y devuelve un resultado entero.

2

Los idiomas son diferentes. En C#, el compilador interpreta esos números como enteros y usa la división de enteros. En VB.NET, el compilador usa la división de coma flotante.

3

De forma predeterminada, C# trata a 576/1000 como división entera, por lo que se obtiene un número entero como resultado.

En VB.NET lo trata como una división de coma flotante.

Al agregar ".0" en un número en C#, explícitamente le dice que este número es un número de punto flotante y, por lo tanto, la división se convierte en punto flotante también.

Cuestiones relacionadas