Сегодня с утра весь офис занимается тем, что проверяет, сколько будет round(1.005,2) в разных системах. Microsoft повсеместно использует так называемое Banker's rounding, округляя до четных чисел. В результате числа 1.005 и 0.995 оба округляются до единицы. Согласно немецким нормам DIN 1333, округление должно идти всегда вверх в случае 5 (так называемое aufrunden).
Шеф, которому звонили на сотовый в отпуске, сказал, что по его экспериментам (все-таки человек опытный!!) в Excel функция round правильно производит округление, поэтому во всех наших проектах мы генерируем OLE-объект Excel и вызываем эту функцию из него :)
Для тех, кто тоже столкнулся с этой проблемой, вот простое решение на Visual Basic, которое легко адаптировать для других языков:
Function KaufRunden(varNumber As Variant, Optional intStellen As Integer = 2) As Double
KaufRunden = Fix("" & varNumber * (10 ^ intStellen) + Sgn(varNumber) * 0.5) / (10 ^ intStellen)
End Function