[英]Is it possible to have a float number without a decimal point in Python?
我問這個問題是因為R中有可能。請注意,1.5和1均為數字類型(雙精度),只有1L是整數。 將字符串強制轉換為數字類型時,如果字符串中沒有一個小數點,則不會顯示小數點。
class(1.5)
# "numeric"
class(1)
# "numeric"
class(1L)
# "integer"
x <- as.numeric("3")
x
# 3
class(x)
# "numeric"
我可以在Python中進行類似的操作嗎? 假設我有一個名為key_in_a_number
的函數:
def key_in_a_number():
num = input("Key in a number here: ")
try:
return float(num)
except ValueError:
return "Please key in only numbers."
現在,如果一個鍵輸入“ 40”,它將返回40.0,但是40.0和40在某些數字上是不同的 。 因此,如果鍵入“ 40”,則應返回40,而僅當鍵入“ 40.0”時,應返回40.0。
我的解決方法是:
def key_in_a_number():
num = input("Key in a number here: ")
try:
return int(num)
except ValueError:
try:
return float(num)
except ValueError:
return "Please key in only numbers."
但是,以這種方式,我不能確定結果是否始終是同一類型,這在后續數據存儲或處理中可能會出現問題。 有什么辦法可以讓浮點數中的數字不帶小數點?
我認為您的核心問題是您誤解了float
。
float
表示C double,幾乎總是表示IEEE 754-1985 double
(或IEEE 754-2008 binary64
,它基本上是相同的東西,但定義更好)。 它始終具有53個二進制數位的精度。 將其指定為40.
, 40.00000
, float(40)
, float('40')
還是float('40.00')
; 這些在各個方面都是相同的。
因此,您要問的主要問題沒有任何意義:
現在,如果一個鍵輸入“ 40”,它將返回40.0,但是40.0和40在某些數字上是不同的。
不,不是。 float("40")
和float("40.0")
都是完全相同的值,沒有任何數字差異,精度也沒有差異。
在Python中, decimal
庫中有另一種類型,表示IEEE 754-2008任意大小的decimal
。 它具有與您要求的一樣多的精度十進制數字。
因此, Decimal('40')
和Decimal('40.')
有兩個數字; Decimal('40.000')
有五個數字,它們可以相等 ,但不相同 ,因為最后一個更精確。
另一方面, Decimal
打印出實際上具有的許多精度:
>>> print(Decimal('40'))
40
>>> print(Decimal('40.'))
40
>>> print(Decimal('40.0'))
40.0
在進行此操作時,如果您確實需要float
和int
值,則以下是將R的每一行轉換為Python的方法:
class(1.5) # numeric
type(1.5) # float
class(1) # numeric
type(1) # int
type(1.) # float
class(1L) # integer
type(1) # int
x <- as.numeric("3") # numeric
x = float(3) # float
x = float("3") # float
注意,就像as.numeric("3")
給您一個numeric
而不是integer
,float(“ 3”) gives you a
浮點rather than an
int`。 考慮到它與等效的R行為相同,我不確定為什么Python的行為會讓您感到困惑。
是,
10
在Python中是整數,而10.
表示相同數字將是浮點數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.