VB.NET中的除法運算符有兩個:/(浮點除法)、(整數除法)
C#中的除法運算符只有一個:/(除法)
VB.NET中的除法運算符與C#中的除法運算符存在很大的差異,使用時注意區分。
關於C#中的除法運算符的介紹(摘自MSDN):
/(除法): 將兩個數相除並返回除數和被除數的數據類型中精度高的數據類型。
執行除法前,編譯器會將除數和被除數的數據類型統一成兩者類型中精度高的數據類型。返回的運算結果的類型也是兩者類型中精度高的數據類型。例如:兩個整數相除的結果始終為一個整數。 一個整數和一個Double型相除,返回結果為Double型。但是需要注意一點,Double和Decimal不能直接進行算術運算,必須先顯式的將兩者類型進行統一,之後才能進行運算,Double和Decimal不能直接進行運算的原因是兩者之間不能進行隱式的類型轉換。
除法運算符 (/) 用第二個操作數除第一個操作數。所有數值類型都具有預定義的除法運算符。
using System;
class MainClass
{
static void Main()
{
Console.WriteLine(-5/2);
Console.WriteLine(-5.0/2);
}}
關於VB.NET中的除法運算符的介紹(摘自MSDN):
/(浮點除法):將兩個數相除並返回以浮點數表示的結果。
所得結果的數據類型取決於操作數的類型。 下表顯示如何確定結果的數據類型。
操作數數據類型 結果數據類型 兩個表達式都是整數數據類型(SByte、Byte、Short、UShort、Integer、UInteger、Long、ULong) Double 一個表達式為 Single 數據類型,而另一個表達式不為 Double Single 一個表達式為 Decimal 數據類型,而另一個表達式不為 Single 或 Double Decimal 任一表達式為 Double 數據類型 Double執行除法之前,任何整數數值表達式都會被擴展為 Double。 如果將結果賦給整數數據類型,Visual Basic 會嘗試將結果從 Double 轉換成這種類型。 如果結果不適合該類型,會引發異常。如果除數或被除數計算結果等於 Nothing,則將其視為零。
(整數除法):將兩個數相除並返回以整數形式表示的結果。
下表如何確定結果的數據類型。 請注意,此表是對稱的;對於給定的操作數數據類型組合,無論操作數的順序如何,結果數據類型都是相同的。
如果 運算符兩個操作數中的任何一個為 Decimal、Single 或 Double,則 Visual Basic 在運算前會嘗試將其轉換為 Long,並且運算的結果數據類型為 Long。如果 Option Strict 為 On,將產生編譯器錯誤。 如果 Option Strict 為 Off,若值超出 Long 數據類型 (Visual Basic) 的范圍,則可能會產生 OverflowException。 轉換為 Long 也服從“四捨六入五成雙”。如果除數或被除數計算結果等於 Nothing,則將其視為零。
一、“/”運算符:
C#中默認的“/”是取整除法(不四捨五入)。譬如C#中1/2默認返回一個整數0.
但是VB.NET中“/”返回一個Double類型的數值(相當於C#中1.0/2的效果)。
在做這類運算時候,VB.NET會把被除數和除數提升到Double類型,因此1/0在VB.NET不是錯誤(因為這個表達式被解析成:1/CDbl(0))。結果CDbl(0)是一個接近於0的,但不是等於0的浮點數(可以理解為“正無窮小”),那麼結果是“正無窮大”。但C#在做"/"時候,由於兩個都是整數,因此直接做整數相除,拋出異常(如果嘗試在C#中1.0/0,可以得到和VB.NET中一樣的結論)。
二、“”運算符:
這是VB.NET獨有的,和C#的“/”一致。值得注意的是如果雙方有一個浮點數,取整結果默認轉化為Long(Int64)。此時1 會發生錯誤。
三、取余運算:
C#中是“%”,VB.NET是Mod,類型按照實際結果決定。