在 Python 中将浮点数拆分为整数和小数部分

目录

Split a number into integer and decimal parts in Python

  1. 在 Python 中将浮点数拆分为整数和小数部分
  2. 使用模运算符将数字拆分为整数和小数部分
  3. 使用 divmod 将数字拆分为整数和小数部分

在 Python 中将浮点数拆分为整数和小数部分

使用该math.modf()方法将数字拆分为整数和小数部分。

math.modf()方法返回所提供数字的小数部分和整数部分。

主程序
import math my_num = 1.3588 result = math.modf(my_num) print(result) # 👉️ (0.3588, 1.0) print(result[0]) # 👉️ 0.3588 print(result[1]) # 👉️ 1.0

您还可以使用解包
将小数部分和整数部分分配给变量。

主程序
import math my_num = 1.3588 dec, integer = math.modf(my_num) print(dec) # 👉️ 0.3588 print(integer) # 👉️ 1.0

我们使用该math.modf()方法将数字拆分为整数和小数部分。

math.modf方法返回所提供数字小数部分和整数部分。

小数部分和整数部分都是float类型

小数部分和整数部分带有所提供数字的符号并且是浮点数。

主程序
import math my_num = -1.3588 result = math.modf(my_num) print(result) # 👉️ (-0.3588, -1.0) print(result[0]) # 👉️ -0.3588 print(result[1]) # 👉️ -1.0 # ----------------------------------------- # ✅ unpack decimal and integer values dec, integer = result print(dec) # 👉️ -0.3588 print(integer) # 👉️ -1.0

请注意, 中的两个值tuple都是浮点数。

拆分后将整数部分转换为int

如果需要
将第二个元组元素转换为整数,请使用 int()
类。

主程序
import math my_num = 1.3588 result = math.modf(my_num) print(result) # 👉️ (0.3588, 1.0) dec = result[0] print(dec) # 👉️ 0.3588 integer = int(result[1]) print(integer) # 👉️ 1

或者,您可以使用%operator 和
floor division //

使用模运算符将数字拆分为整数和小数部分

这是一个两步过程:

  1. 使用 floor division 通过除以得到数字的整数部分1,例如num // 1
  2. 使用取模%运算符通过除以 后的余数来获取小数部分1,例如num % 1
主程序
my_num = -1.3588 dec = my_num % 1 print(dec) # 👉️ 0.3588 integer = my_num // 1 print(integer) # 👉️ 1.0

取模(%)
运算符返回第一个值除以第二个值的余数。

当我们使用模运算符将一个数除以 时1,余数就是小数部分。

主程序
print(1.3588 % 1) # 👉️ 0.3588

您可以使用 floor 除法来获取数字的整数部分。

主程序
my_num = -1.3588 integer = my_num // 1 print(integer) # 👉️ 1.0 dec = my_num % 1 print(dec) # 👉️ 0.3588
使用 floor 除法运算符的结果是对结果应用函数的//数学除法。floor()

将数字除以1并向下舍入,得到数字的整数部分。

但是,如果您决定使用这种方法,请注意它不会像您期望的那样处理负数。
主程序
my_num = -1.3588 dec = my_num % 1 print(dec) # 👉️ 0.6412 integer = my_num // 1 print(integer) # 👉️ -2.0

如果您必须处理负数,请改用该math.modf()方法。

# 将数字拆分为整数和小数部分divmod

您可能还会在网上看到使用该divmod()函数的示例。

但是,请注意,它divmod()也不会以您期望的方式处理负数。

主程序
my_num = 1.3588 result = divmod(my_num, 1) print(result) # 👉️ (1.0, 0.3588) integer = int(result[0]) print(integer) # 👉️ 1 dec = result[1] print(dec) # 👉️ 0.3588

divmod函数接受两个数字并返回一个包含 2 个值的元组:

  1. 第一个参数除以第二个参数的结果。
  2. 第一个参数除以第二个参数的余数。

但是,该divmod()函数也不会以适合我们用例的方式处理负数。

主程序
my_num = -1.3588 result = divmod(my_num, 1) print(result) # 👉️ (-2.0, 0.6412) integer = int(result[0]) print(integer) # 👉️ -2 dec = result[1] print(dec) # 👉️ 0.6412

For this reason, you should use the math.modf() method when you have to split
a number into integer and decimal parts.

# Subtracting integers from floats and accuracy

You can also split a floating-point number to an integer by:

  1. Converting the float to an integer (to drop the decimal).
  2. Subtracting the integer from the float to get the decimal part.
main.py
a_float = 1.03588 integer = int(a_float) print(integer) # 👉️ 1 dec = a_float - integer print(dec) # 👉️ 0.03587999999999991

However, notice that you might get surprising results when subtracting from a
floating-point number.

The resulting number cannot be represented in binary, so the precision is lost.

This might or might not suit your use case.

I’ve also written an article on
how to split an integer into digits.

# Additional Resources

You can learn more about the related topics by checking out the following
tutorials: