excel ROUND和WORKSHEETFUNCTION.ROUND

hmae6n7t  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(158)

为什么结果A1(0.224)和B1(0.224000006914139)不同?

  1. Sub a()
  2. Cells(1, 1) = Application.WorksheetFunction.Round(Rnd(-1), 4)
  3. Cells(1, 2) = Round(Rnd(-1), 4)
  4. Cells(1, 3) = "=a1=b1"
  5. Cells(1, 4) = "'0.2240"
  6. End Sub

字符串
如何复制B1并粘贴到D1的四个小数位而不丢失尾随零?我可以用rnd(-1)cells(1,2)来改变最后一个"'0.2240"吗?非常感谢。

krcsximq

krcsximq1#

您的问题源于Rnd返回数据类型Single的事实。See here
Round被传递numdecimalplaces > 0和一个Single值时,它接受该数据类型,并返回一个SingleWorksheetFunction.Round没有:它返回一个双精度型。(如果Round被传递一个Double,它返回一个Double
这并不重要 * 在监视器本身 * 内(请参见下面的监 windows 口图像以获取证据)
将值放入Excel单元格并转换为Excel的单元格数据类型时会出现此问题。Single的转换会导致浮点精度问题
要解决这个问题,您的代码可以是

  1. Cells(1, 2) = Round(CDbl(Rnd(-1)), 4)

字符串


的数据
要将结果作为文本**放入Cell(1, 4)中,可以使用

  1. Cells(1, 4) = "'" & Format(Cells(1, 2), "0.0000")


  1. Cells(1, 4) = "'" & Cells(1, 2).Text


注意:"'" &是必要的,因为Excel将字符串识别为数字,并“帮助”将其转换回数字。

展开查看全部
quhf5bfb

quhf5bfb2#

根据最新的Microsoft文档,Round函数确实可以返回与Application.WorksheetFunction.Round方法不同的结果。以下是Microsoft在docs for Round function中对此的解释:
此函数返回通常称为银行家舍入的值。因此,在使用此函数之前请小心。要获得更可预测的结果,请在Excel中使用“舍入”函数。
下面是一个例子,说明即使所有数值都设置为Double,Round函数舍入结果也会非常奇怪:
下面是一段代码,其中所有数值都是Double格式:

  1. WeightNetto = rngArticleCell.Offset(, 8).Value2
  2. Quantity23 = rngArticleCell.Offset(, -4).Value2
  3. If Quantity23 <> 0 Then
  4. WeightPerUnit = WeightNetto / Quantity23
  5. RndWeightPerUnit = Round(WeightPerUnit, 3)
  6. Else
  7. WeightPerUnit = 0
  8. End If

字符串

舍入用例#1:

舍入情况#2:

正如您所看到的,在上面的案例#2中,Round将一半四舍五入为2。但是,如果您通过Application.WorksheetFunction.Round运行案例#2,则一半将四舍五入为3。
因此,如果你真的需要你的Round代码来实现对单元格内Round()函数的精确舍入结果,我强烈建议你使用Application.WorksheetFunction.Round而不是实际的Round。

展开查看全部

相关问题