Python 使用xlrd从xls获取浮点数

Python 使用xlrd从xls获取浮点数,python,excel,floating-point,xlrd,Python,Excel,Floating Point,Xlrd,我正在开发一个Python脚本,它使用xlrd从xls文件中获取数据。但是,我不知道如何以与Excel文件中相同的精度打印浮点数 我尝试按照中的建议使用repr,但这仍然提供了与我想要的不同的精度 例如,Excel文件有一个值为-1.62717010683527的单元格,然后使用strworksheet.celli,j.value返回-1.62717010684, 当repr worksheet.celli时,j.value返回-1.6271701068352695。 使用strDecimalw

我正在开发一个Python脚本,它使用xlrd从xls文件中获取数据。但是,我不知道如何以与Excel文件中相同的精度打印浮点数

我尝试按照中的建议使用repr,但这仍然提供了与我想要的不同的精度

例如,Excel文件有一个值为-1.62717010683527的单元格,然后使用strworksheet.celli,j.value返回-1.62717010684, 当repr worksheet.celli时,j.value返回-1.6271701068352695。 使用strDecimalworksheet.celli,j.value生成-1.6271701068352695095187044671547482721507549285868671875


以上这些都没有给我Excel中的原始值。我必须处理许多这样的数字,每个数字在点后都有不同的位数,因此不适合使用%.10f等。

仅从浮点值,Python或任何其他程序都无法确定所需的显示精度,因此首先您必须找出要显示的位置,例如,通过解析excel数字格式字符串,可能是“0.00000”->5位小数

获取数字格式的起点可能是

一旦确定了要显示的位置数,就可以使用字符串格式的双参数形式

value = -1.6271701068352695   # value stored ( not displayed ) in excel
precision = 5    # to be found out from excel number format
print '%.*f' % (precision, value)

不幸的是,格式化为任意Excel格式很难,因此如果格式化比0.0000…0更复杂,您可能必须从头开始编写格式化程序。

仅从浮点值,Python或任何其他程序都无法确定所需的显示精度,因此首先您必须找出要显示的位置,例如,通过解析excel数字格式字符串,可能是“0.00000”->5位小数

获取数字格式的起点可能是

一旦确定了要显示的位置数,就可以使用字符串格式的双参数形式

value = -1.6271701068352695   # value stored ( not displayed ) in excel
precision = 5    # to be found out from excel number format
print '%.*f' % (precision, value)

不幸的是,格式化为任意Excel格式很难,因此如果格式化比0.0000…0更复杂,您可能必须从头开始编写格式化程序。

Excel中的精度仅限于15位有效数字

使用str%0.15g%cell.value实现您想要的: g-如果指数大于-4或小于精度,则与e相同,否则为f。
不要忘记0。在%0.15中。

Excel中的精度仅限于15位有效数字

使用str%0.15g%cell.value实现您想要的: g-如果指数大于-4或小于精度,则与e相同,否则为f。
不要忘记0。在%0.15中。

Excel在计算中使用IEEE标准的64位浮点。然而,它试图假装使用精度为15位小数的十进制浮点

excel的原始值是一个非常模糊的概念。您似乎想要Excel显示给您的内容。这不是它放在文件中的内容。它放在文件中的是IEEE标准的64位二进制浮点值

xlrd准确地检索该值

Python的repr以可检索的方式提供该值的精确字符串表示。。。floatreprvalue==值是绝对保证的

使用strvalue会丢失精度


使用十进制。十进制的有效位数超过17位是没有意义的。

Excel在计算中使用IEEE标准的64位浮点。然而,它试图假装使用精度为15位小数的十进制浮点

excel的原始值是一个非常模糊的概念。您似乎想要Excel显示给您的内容。这不是它放在文件中的内容。它放在文件中的是IEEE标准的64位二进制浮点值

xlrd准确地检索该值

Python的repr以可检索的方式提供该值的精确字符串表示。。。floatreprvalue==值是绝对保证的

使用strvalue会丢失精度


使用十进制。小数位数超过17位的十进制是没有意义的。

我的回答是使用数字格式将数字转换为字符串的代码链接,就像Excel在这里所做的那样:

我的回答是一个链接,指向使用数字格式将数字转换为字符串的代码,就像Excel在这里所做的那样:

值最初是如何进入单元格的?repr给我的是-1.62717010683527,很好。如果repr给你的是其他东西,那是因为该单元格中有其他东西。它被输入到单元格中--1.62717010683527,然后该单元格被格式化为带小数点后两位的百分比。双击Excel中的单元格可以得到-1.62717010683527,还可以使用带有COM对象的库来获取单元格的值。由于文件中有大量数据,我发现在xlrd cell.value上使用repr返回相同的浮点数,并有两个额外的十进制位置--1.6271701068352695。但是,返回的值很少会破坏此模式
此外,以下值以excel百分比格式输入,随后在单元格上应用两位小数:0.008、0.0135、0.0713等。;repr返回0.00800000000000001,…当我在Excel中输入-1.62717010683527时,无论Excel中的格式如何,我都会使用repr返回-1.62717010683527。在Excel中输入-1.6271701068352695实际上并不简单。我通过将两个单元格相加来输入较长的值。请注意,Excel的精度不如repr使用的IEEE标准双精度。repr可以分辨出-1.62717010683527和-1.6271701068352695之间的差异,但Excel无法分辨。值最初是如何进入单元格的?repr给我的是-1.62717010683527,很好。如果repr给你的是其他东西,那是因为该单元格中有其他东西。它被输入到单元格中--1.62717010683527,然后该单元格被格式化为带小数点后两位的百分比。双击Excel中的单元格可以得到-1.62717010683527,还可以使用带有COM对象的库来获取单元格的值。由于文件中有大量数据,我发现在xlrd cell.value上使用repr返回相同的浮点数,并有两个额外的十进制位置--1.6271701068352695。但是,很少有打破此模式的值会像在excel中一样返回。此外,以下值以excel百分比格式输入,随后在单元格上应用两位小数:0.008、0.0135、0.0713等。;repr返回0.00800000000000001,…当我在Excel中输入-1.62717010683527时,无论Excel中的格式如何,我都会使用repr返回-1.62717010683527。在Excel中输入-1.6271701068352695实际上并不简单。我通过将两个单元格相加来输入较长的值。请注意,Excel的精度不如repr使用的IEEE标准双精度。repr可以区分-1.62717010683527和-1.6271701068352695之间的差异,但Excel不能。我可以获得Excel格式,但它不是用python格式化浮点数的好指南。值为-1.62717010683527且格式为0.00%的单元格将在Excel中显示-1.63%,而我仍希望使用xlrd获取单元格中的原始值。我可以获取Excel格式,但这不是用python格式化浮点数的好指南。值为-1.62717010683527且格式为0.00%的单元格将在Excel中显示-1.63%,而我仍希望使用xlrd获取单元格中的原始值。