Python—如何去掉像“2345.67”这样的数字的小数点

Python—如何去掉像“2345.67”这样的数字的小数点,python,Python,我想把小数点和数字分开 2345.67 k = 2345 d = .67 编辑: 如果负数很重要: if k < 0: k += 1 d -= 1 编辑: 如果负数很重要: if k < 0: k += 1 d -= 1 有几种方法可以做到这一点,但这里有一些简单的方法 将其转换为字符串,拆分并重新分配值: >>> n = 2345.67 >>> n_string = str(n) >>> k, d = n_

我想把小数点和数字分开

2345.67
k = 2345
d = .67
编辑:

如果负数很重要:

if k < 0:
  k += 1
  d -= 1
编辑:

如果负数很重要:

if k < 0:
  k += 1
  d -= 1

有几种方法可以做到这一点,但这里有一些简单的方法

将其转换为字符串,拆分并重新分配值:

>>> n = 2345.67
>>> n_string = str(n)
>>> k, d = n_string.split('.')
>>> k, d = int(k), int(d)
>>> print(k, d)
(2345, 67)
请注意,使用此选项,您将.67更改为67

或者,减去值并获取它们:

>>> k = math.floor(n)
>>> d = abs(n)-abs(k)
>>> print(k, d)
2345 0.6700000000000728

希望这有帮助

有几种方法可以做到这一点,但这里有一些简单的方法

将其转换为字符串,拆分并重新分配值:

>>> n = 2345.67
>>> n_string = str(n)
>>> k, d = n_string.split('.')
>>> k, d = int(k), int(d)
>>> print(k, d)
(2345, 67)
请注意,使用此选项,您将.67更改为67

或者,减去值并获取它们:

>>> k = math.floor(n)
>>> d = abs(n)-abs(k)
>>> print(k, d)
2345 0.6700000000000728

希望这有帮助

如果您确实需要避免浮点运算:

from decimal import Decimal
num = Decimal('2345.67')
sign, digits, exponent = num.as_tuple()

sign = (-1)**sign


k, d = sign*int(''.join(str(d) for d in digits[:exponent])), sign*int(''.join(str(d) for d in digits[exponent:]))

# optional: d *= 10**exponent if you really need it to turn it back into a float

我意识到这比在字符串上拆分要复杂得多,但如果您真的需要避免浮点运算,则最好知道十进制是否需要使用它进行任何实际的数学运算:

from decimal import Decimal
num = Decimal('2345.67')
sign, digits, exponent = num.as_tuple()

sign = (-1)**sign


k, d = sign*int(''.join(str(d) for d in digits[:exponent])), sign*int(''.join(str(d) for d in digits[exponent:]))

# optional: d *= 10**exponent if you really need it to turn it back into a float

我意识到这比在字符串上拆分要复杂得多,但如果你需要用它做任何实际的数学运算,十进制是很好的了解。

@Haidro:可能是因为我没有分配给k和d.printdivmod-2345.67,1;==>-2346.0,0.3299999992724如果这是原因的话,我会非常难过。使用divmod,这是非常棒的。@Artur这是否重要取决于你对负数的期望行为@海德罗:可能是因为我没有给k和d赋值。printdivmod-2345.67,1;=>-2346.0,0.3299999992724如果这是原因的话,我会非常难过。使用divmod,这是非常棒的。@Artur这是否重要取决于你对负数的期望行为。。!它完全破坏负数。它完全破坏负数。第二个破坏负数。第二个破坏负数。