如何将浮点数转换为没有小数位的字符串
How to cast float to string with no decimal places
我正在使用 openpyxl
从电子表格中读取值。这些值被读取为浮点数,我不完全确定为什么。
import openpyxl as opx
wb = opx.load_workbook(SKU_WORKBOOK_PATH, use_iterators=True, data_only=True)
ws = wb.worksheets[0]
for row in ws.iter_rows():
foo = str(int(row[1].internal_value))
这是抛出错误:
ValueError: invalid literal for int() with base 10: '6978279.0'
通常,openpyxl 将整数值读取为 int
,但这次它以浮点型转换为字符串读取它。在电子表格中,此单元格的值为 6978279
.
我正在使用 foo = str(int(float(foo)))
将其转换为我想要的字符串,这会按预期生成 '6978279'
。我也可以做 foo = foo[:-2]
,但这让我担心另一个可能被读作 int
或更多小数位的单元格会把事情搞砸。
这感觉像是一种糟糕的、混乱的方式,将我拥有的东西融入我想要的东西中。有没有更pythonic的方法来做到这一点?我是否以强制浮动的方式阅读 xlsx
?如果没有三重铸造我怎么能做到这一点?
如果你永远不会有像 0.0
这样的小数,你可以 str.rstrip
它会使 6978279.0
6978279
从任何其他小数的末尾删除零不会将其值 1.12300
更改为 1.233
:
In [20]: "1.234200".rstrip("0.")
Out[20]: '1.2342'
In [21]: "1.0".rstrip("0.")
Out[21]: '1'
如果你可以有 0.0 等..你可以在字符串为空时捕获:
In [22]: s = "0.0".rstrip("0.") or "0"
如果您需要返回 int 或 float(可能用于算术运算),您可以使用这样的函数:
def strip_num_or_float(value):
try:
value= int(value)
except TypeError:
value = value.normalize()
return value
我正在使用 openpyxl
从电子表格中读取值。这些值被读取为浮点数,我不完全确定为什么。
import openpyxl as opx
wb = opx.load_workbook(SKU_WORKBOOK_PATH, use_iterators=True, data_only=True)
ws = wb.worksheets[0]
for row in ws.iter_rows():
foo = str(int(row[1].internal_value))
这是抛出错误:
ValueError: invalid literal for int() with base 10: '6978279.0'
通常,openpyxl 将整数值读取为 int
,但这次它以浮点型转换为字符串读取它。在电子表格中,此单元格的值为 6978279
.
我正在使用 foo = str(int(float(foo)))
将其转换为我想要的字符串,这会按预期生成 '6978279'
。我也可以做 foo = foo[:-2]
,但这让我担心另一个可能被读作 int
或更多小数位的单元格会把事情搞砸。
这感觉像是一种糟糕的、混乱的方式,将我拥有的东西融入我想要的东西中。有没有更pythonic的方法来做到这一点?我是否以强制浮动的方式阅读 xlsx
?如果没有三重铸造我怎么能做到这一点?
如果你永远不会有像 0.0
这样的小数,你可以 str.rstrip
它会使 6978279.0
6978279
从任何其他小数的末尾删除零不会将其值 1.12300
更改为 1.233
:
In [20]: "1.234200".rstrip("0.")
Out[20]: '1.2342'
In [21]: "1.0".rstrip("0.")
Out[21]: '1'
如果你可以有 0.0 等..你可以在字符串为空时捕获:
In [22]: s = "0.0".rstrip("0.") or "0"
如果您需要返回 int 或 float(可能用于算术运算),您可以使用这样的函数:
def strip_num_or_float(value):
try:
value= int(value)
except TypeError:
value = value.normalize()
return value