gpt4 book ai didi

VBA 截断值

转载 作者:行者123 更新时间:2023-12-04 22:32:24 26 4
gpt4 key购买 nike

我正在尝试截断一些值,因为舍入函数不适合我的问题,因为我想将我正在处理的值与其他一些值进行比较,但如果它们被向上或向下舍入,我不这样做,所以我得到错误。

无论如何,我已经尝试了很多东西,但仍然没有得到我想要的...必须是 =TRUNC但它在 VBA 中不可用...

我最后一次尝试几乎给出了我想要的结果是:

.Cells(iLine, iCol) = Int(.Cells(iLine, iCol).Value * 1000) / 1000

但问题是,有时当我有一个“ -1”时,它会给出“ -1.001”,这样就搞砸了……我真的不知道为什么会这样,因为我在 * 1000 后面放了一个 msgbox。 (所以在 / 1000 之前),结果是 -1000。所以问题出在分工上。

--> 所以如果有人知道截断的更好解决方案或者你知道为什么 1000/1000给我 -1.001先感谢您 !

另一个解决方案是:
Range(.Cells(iLine, iCol), .Cells(iLine, iCol)).Select 
Selection.NumberFormat = "0.000"
Range(.Cells(iLine, iCol), .Cells(iLine, iCol)) = Range(.Cells(iLine, iCol), .Cells(iLine, iCol)).Text * 1

但这不是我想要的,因为有两件事:
  • 它强制我的单元格格式为 0.000,当您有 -1.000
  • 时阅读起来不舒适/不美观
  • 仅使用范围的简单值是不可能做到这一点的(虽然我不是关于这个)


  • 编辑:在我的线路上进行了几次测试后 .Cells(iLine, iCol) = Int(.Cells(iLine, iCol) * 1000) / 1000看来问题来自 Int()功能。因为 -1*1000 = -1000但是 int(-1000) = -1001 .任何人都知道为什么会这样?

    即使我通过假设-1.000000 来增加这个单元格的精度,我也会遇到同样的问题,只有当我将 Int() 放在上面时,才会出现额外的 1

    最佳答案

    将十进制数(即浮点数)截断为整数(例如,没有小数位)的一种方法是使用 INT功能。

    MsgBox Int(1.234)

    或者
    MsgBox Int(1.789)

    ...都返回 1 .

    请注意,此函数适用于 VBA 和工作表公式。

    浮点舍入误差

    You can frequently prevent floating point rounding errors from affecting your work by setting the Precision as displayed option before you apply a number format to your data. This option forces the value of each number in the worksheet to be at the precision that is displayed on the worksheet.

    Note: Using the Precision as displayed option can have cumulative calculation effects that can make your data increasingly inaccurate over time. Use this option only if you are certain that the displayed precision will maintain the accuracy of your data.



    更多信息来自 sourcehere .

    编辑:直接引用工作表时的舍入问题

    我无法在此处重现您的问题,但这可能取决于其他因素,例如单元格格式和 Excel 的设置。

    确保您没有此问题的最简单/最佳方法可能是在进行任何计算之前将数字放入整数变量中。

    所以而不是:
    Range("A2") = Int( Range("A1") / 1000 ) * 1000

    利用:
    Dim myInt as Integer, myInt2 as Integer  'don't 'Dim' variables within a loop

    myInt = Range("A1")
    myInt2 = Int( myInt / 1000 ) * 1000
    Range("A2") = myInt2

    更多信息:
  • 办公室支持: INT Function (Excel Worksheet)
  • MSDN : Int , Fix Functions (VBA)
  • 办公室支持:Set rounding precision
  • 办公室支持:How to correct rounding errors in floating-point arithmetic


  • 另一个编辑:

    我很高兴您认为您找到了解决方案,但我担心您所描述的不是正常行为。证明:

    img

    ...因此,虽然您的解决方法可能会在这种情况下为您提供正确的答案,但可能还有其他计算受此影响并不那么明显。

    有许多设置可能会影响这一点。我建议使用新的空白工作簿再试一次,最好是在重新启动后。

    关于VBA 截断值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51782439/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com