※ 引述《RuinGgg (Tank)》之铭言:
: 主要是Data1 和Data2要去做简单比较,
: Data1里面是Excel资料,有小数点,
: 我是直接以Round(XX,3)来写,
: EX: 6.3333333 -> 6.333
直接在 Excel 使用 =round(储存格,3) 就是常见的四舍五入。
: Data2的资料是由VBA小程式跑出来的,
: 其中我用worksheetfunction.round(XX,3)来写,但是6.3333333会变成6.334
: 另外试了worksheetfunction.rounddown,
: 结果变成6.332....
我猜这边描述有误,因为直接使用 WorksheetFunction.Round(,3)
或是 WorksheetFunction.RoundDown(,3)
甚至 WorksheetFunction.RoundUp(,3)
相当于直接在 Excel 的储存格输入 =Round(), =RoundDown, =RoundUp()
不会出现你说的进位问题,都是单纯的四舍五入、无条件舍去或进位。
你的提问应该是,
在 VBA 之下的 Round() 计算跟 使用 WorksheetFunction.Round() 为什么有不同?
官方文件指出在 VBA 底下的 Round() 使用
奇进偶舍,又称为四舍六入五成双规则、银行进位法(Banker's Rounding)
※维基百科 => (https://bit.ly/2DoAT6Q)
※Microsoft Docs => (https://bit.ly/2DqpnrN)
简单来说,遇到 4 就舍去,遇到 6 就进位,
唯独遇到 5 比较麻烦。
1. 5 后面有数值? 有 => 进位。
2. 5 后面没有数值,
此时 5 前面的数字是偶数 => 舍去;5 前面是奇数 => 进位。
例如:
Round(1.252,1)= 1.3 取小数第一位,5 后面有数值
Round(1.25,1) = 1.2 取小数第一位,5 后面无数值且前面是 2 偶数
Round(1.35,1) = 1.4 取小数第一位,5 后面无数值且前面是 3 奇数
因自己处理过计算数值的问题,借此机会回答你的问题。:P
(使用版本为 2007 Excel)