我之所以这样问是因为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."
但是,以这种方式,我不能确定结果是否始终是同一类型,这在后续数据存储或处理中可能会出现问题。有什么方法可以让浮点数中的数字不带小数点?
答案 0 :(得分:3)
我认为您的核心问题是您误解了float
是什么。
A float
代表C的两倍,几乎总是意味着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
库中有一个 different 类型,它表示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
float rather than an
int`。考虑到它与等效的R行为相同,我不确定为什么Python的行为会让您感到困惑。
答案 1 :(得分:0)
是的
10
在Python中将是一个整数,而代表相同数字的10.
将是一个浮点数。