在Excel中存储和执行长小数的计算而不进行舍入

时间:2017-10-12 22:31:40

标签: excel formatting rounding

我试图在Excel中对包含长小数的数字进行一些计算。

但是,Excel似乎不允许我使用我想要使用的数字填充单元格。

实施例

  • 如果我在新的标准单元格中输入600000.00000000030000000000 电子表格,它被转换为600000.这是有道理的 单元格格式设置为“常规”。
  • 如果我将单元格格式设置为Number并设置小数 到20岁的地方,我希望能够正确输入数字。

而是将600000.00000000030000000000转换为600000.00000000000000000000。

有谁知道为什么会这样?

3 个答案:

答案 0 :(得分:1)

Excel仅存储15个有效数字。无论数字格式如何,任何超出该数字的数字都会自动舍入。

首先将单元格设置为文本格式会将数字存储为包含所需数字的字符串,但Excel无法对其执行任何计算。

但是,VBA可以使用十进制类型变量进行计算,这些变量最多可存储29个有效数字。

如果您首先将值存储为Excel中的文本(在输入值之前将单元格编号格式设置为Text),则可以在VBA中创建用户定义函数以读取字符串值,将它们转换为十进制值,执行计算然后返回一个计算完全精度的字符串。

例如:

Function PrecisionSum(ra As Range) As String

    'Declare variables holding high precision Decimal values as Variants
    Dim decSum As Variant 

    'This loop will sum values from all cells in input range
    For Each raCell In ra
        'Read values from input cells, converting the strings to Decimals using CDec function
        decSum = decSum + CDec(raCell.Value)
    Next raCell

    'Return calculated result as a String
    PrecisionSum = Format(decSum, "0.00000000000000000000")

End Function

Img

您需要编写函数来执行您想要的操作。

请注意,您仍然受限于您在VBA中使用的任何功能的准确性。例如,返回数字的平方根的SQR函数仅返回具有Double精度的数字,而不管输入的精度如何。

答案 1 :(得分:0)

这与Excel可以处理的数字精度有关。我注意到,如果删除整数部分,我可以显示.00000000030000000000部分。也许你的整数可以有一个单独的列,在小数部分进行计算,然后再次添加整数部分。 您可以查看有关此问题的Wiki - 通过添加600,000,您实际上是添加6e5 + 3e-8,Excel必须使用累积位深度。 Numeric precision in Microsoft Excel

答案 2 :(得分:-1)

您可以尝试使用指数(科学)表示法吗?