Python 和 Java Number 類型對比!
在 Python 中,“Number”是一個類別,包含不同類型的數值數據。Python 支持多種類型的數字,包括整數(int)、浮點數(Float)和復數(Complex)。這篇文章,我們將分析 Python的每種 Number類型以及和 Java語言的對比。
一、Python int
Python 的 int(整數)是一個包含負數的整數,不包括小數。在 Python 中,整數值的長度沒有限制。
下面通過幾個示例展示 Python 的 int 使用:
示例 1:創建整數并檢查類型
num = -8
# 打印數據類型
print(type(num))
輸出:
<class 'int'>
示例 2:對整數類型執行算術操作
a = 5
b = 6
# 加法
c = a + b
print("加法:", c)
d = 9
e = 6
# 減法
f = d - e
print("減法:", f)
g = 8
h = 2
# 除法
i = g // h
print("除法:", i)
j = 3
k = 5
# 乘法
l = j * k
print("乘法:", l)
m = 25
n = 5
# 取模
o = m % n
print("取模:", o)
p = 6
q = 2
# 指數
r = p ** q
print("指數:", r)
輸出:
加法: 11
減法: 3
除法: 4
乘法: 15
取模: 0
指數: 36
二、Python Float
Float(浮點數)是具有浮點表示的實數。它通過小數點指定??蛇x地,字符 e 或 E 后跟正或負整數可以附加以指定科學計數法。一些表示為浮點數的數字示例是 0.5 和 -7.823457。
它們可以直接通過輸入帶小數點的數字創建,或者通過對整數進行操作(如除法)創建。數字末尾的多余零會自動忽略。
下面通過幾個示例展示 Python 的 Float 使用:
示例 1:創建浮點數并檢查類型
num = 3/4
# 打印數據類型
print(type(num))
輸出:
<class 'float'>
如我們所見,除以任何兩個整數會產生一個浮點數。通過對兩個浮點數、或一個浮點數和一個整數進行操作,也會產生浮點數。
num = 6 * 7.0
print(type(num))
輸出:
<class 'float'>
示例 2:對浮點數類型執行算術操作
a = 5.5
b = 3.2
# 加法
c = a + b
print("加法:", c)
# 減法
c = a - b
print("減法:", c)
# 除法
c = a / b
print("除法:", c)
# 乘法
c = a * b
print("乘法:", c)
輸出:
加法: 8.7
減法: 2.3
除法: 1.71875
乘法: 17.6
注意:浮點數的精度只有到小數點后 15 位,第 16 位可能不準確。
三、Python Complex
Complex(復數)是由實部和虛部組成的數。例如,3 + 4j 是一個復數,其中 3 是實部,4 乘以 j 是虛部。
下面通過幾個示例展示 Python 的 Complex 使用:
示例 1:創建復數并檢查類型
num = 6 + 9j
print(type(num))
輸出:
<class 'complex'>
示例 2:對復數類型執行算術操作
a = 1 + 5j
b = 2 + 3j
# 加法
c = a + b
print("加法:", c)
d = 1 + 5j
e = 2 - 3j
# 減法
f = d - e
print("減法:", f)
g = 1 + 5j
h = 2 + 3j
# 除法
i = g / h
print("除法:", i)
j = 1 + 5j
k = 2 + 3j
# 乘法
l = j * k
print("乘法:", l)
輸出:
加法: (3+8j)
減法: (-1+8j)
除法: (1.307692307692308+0.5384615384615384j)
乘法: (-13+13j)
四、Python 類型轉換
接下來,我們分析 int,Float,Complex 這幾種 Number類型之間是如何轉換的。
使用算術運算
我們可以使用加法、減法等運算隱式(自動)地改變數字的類型,如果其中一個操作數是浮點數。這種方法不適用于復數。
示例:使用算術運算進行類型轉換
a = 1.6
b = 5
# c被轉換成 float類型
c = a + b
print(c)
print(type(c))
輸出:
6.6
<class 'float'>
使用內置函數
我們還可以使用內置函數如 int()、float() 和 complex() 顯式地將一種類型轉換為另一種類型。
示例:使用內置函數進行類型轉換
a = 2
print(float(a))
b = 5.6
print(int(b))
c = '3'
print(type(int(c)))
d = '5.6'
print(type(float(c)))
e = 5
print(complex(e))
f = 6.5
print(complex(f))
輸出:
2.0
5
<class 'int'>
<class 'float'>
(5+0j)
(6.5+0j)
需要注意的幾個點:
- 當我們將浮點數轉換為整數時,小數部分會被截斷
- 不能將復數類型的數字轉換為整數類型或浮點類型的數字
- 不能對字符串應用復數的內置函數。
五、Python Decimal Numbers
和 Java一樣,Python 對浮點數進行算術運算也可能會產生一些意想不到的結果,下面通過幾個示例進行說明:
示例 1:1.1 + 2.2 = ?
很多人會認為這個運算的結果應該是 3.3,但 Python 給出的輸出如下:
a = 1.1
b = 2.2
c = a + b
print(c)
輸出:
3.3000000000000003
示例 2:1.2 - 1.0 = ?
我們會期望結果是 0.2,但讓我們看看 Python 給出的輸出。
a = 1.2
b = 1.0
c = a - b
print(c)
輸出:
0.19999999999999996
大家可能會認為 Python 有問題,但實際上并不是。這與 Python 關系不大,而更多與底層平臺如何處理浮點數有關。這是處理系統內部浮點數時常見的問題。這個問題是由于內部浮點數表示使用固定數量的二進制數字來表示小數而引起的。在許多情況下,某些小數在二進制中很難表示,因此會導致小的舍入誤差。
在這種情況下,以 1.2 為例,0.2 在二進制中的表示是 0.00110011001100110011001100……,很難在內部存儲這個無限小數。通常,一個浮點對象的值以固定精度(二進制浮點數,通常為 53 位)存儲。因此,我們內部表示 1.2 為:
1.0011001100110011001100110011001100110011001100110011
這正好等于:
1.1999999999999999555910790149937383830547332763671875
對于這種情況,Python 的 decimal 模塊可以解決問題。如前所述,浮點數的精度只有到小數點后 15 位,但在十進制數中,精度是用戶定義的。它以我們在學校學習的方式對浮點數進行運算。
讓我們看看上面兩個示例,并嘗試使用十進制數解決它們。
示例:
import decimal
a = decimal.Decimal('1.1')
b = decimal.Decimal('2.2')
c = a + b
print(c)
輸出:
3.3
我們可以在以下情況下使用 decimal 模塊:
- 當我們希望自行定義所需的精度時
- 對于需要精確十進制表示的金融應用程序
六、Python 和 Java數字類型的對比
Python 和 Java 都是強類型語言,但它們處理數值類型的方式有所不同。以下是 Python 數字類型和 Java 數字類型的對比:
整數類型
Python語言:
int: 在 Python 3 中,int 類型可以表示任意大小的整數,不存在 long 類型的區別。
num = 123456789012345678901234567890
print(type(num)) # 輸出:<class 'int'>
Java語言:
- byte: 8 位有符號整數,范圍從 -128 到 127。
- short: 16 位有符號整數,范圍從 -32,768 到 32,767。
- int: 32 位有符號整數,范圍從 -2^31 到 2^31-1。
- long: 64 位有符號整數,范圍從 -2^63 到 2^63-1。
int num = 1234567890;
long bigNum = 1234567890123456789L;
浮點數類型
Python語言:
- float: Python 的 float 類型是雙精度浮點數(64 位),即 C 語言中的 double。
num = 3.14159
print(type(num)) # 輸出:<class 'float'>
Java語言:
- float: 32 位單精度浮點數。
- double: 64 位雙精度浮點數。
float num = 3.14f;
double bigNum = 3.14159;
復數類型
Python語言:
- complex: Python 原生支持復數,使用 complex 類型表示,復數由實部和虛部組成。
num = 2 + 3j
print(type(num)) # 輸出:<class 'complex'>
Java語言:
- Java 沒有內置的復數類型。如果需要處理復數,可以使用第三方庫如 Apache Commons Math。
高精度類型
Python語言:
- decimal: Python 提供 decimal 模塊用于高精度十進制運算。
import decimal
num = decimal.Decimal('3.14159')
print(type(num)) # 輸出:<class 'decimal.Decimal'>
Java語言:
- BigDecimal: Java 提供 BigDecimal 類用于高精度十進制運算。
import java.math.BigDecimal;
BigDecimal num = new BigDecimal("3.14159");
類型轉換
Python語言:
- Python 使用內置函數進行類型轉換,如 int(), float(), complex(), 和 str()。
a = 5
b = float(a) # 轉換為浮點數
Java語言:
- Java 使用顯式類型轉換和包裝類進行類型轉換,如 (int), (double), Integer.parseInt(), Double.parseDouble()。
int a = 5;
double b = (double) a; // 轉換為浮點數
總結
本文我們分析了 Python 的 Number類型,它包含:
- int
- float
- complex
接著,我們對比了 Java 和 Python 語言的數字類型:
- 整數: Python 的 int 類型可以表示任意大小的整數,而 Java 有多種整數類型(byte, short, int, long)。
- 浮點數: Python 使用 float 表示雙精度浮點數,而 Java 有單精度和雙精度浮點數(float, double)。
- 復數: Python 原生支持復數,而 Java 需要使用第三方庫。
- 高精度: Python 使用 decimal 模塊,Java 使用 BigDecimal 類。
- 類型轉換: Python 使用內置函數,Java 使用顯式類型轉換和包裝類。
盡管語言語法上有差異,但是底層的邏輯是相通的。