簡體   English   中英

在Python中是否可以有一個不帶小數點的浮點數?

[英]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.00000float(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

在進行此操作時,如果您確實需要floatint值,則以下是將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM