ich mit der ROUND-Funktion in Basic für Libreoffice in ein Problem ausgeführt haben:Round Funktion Forces Scientific Notation statt Dezimal
Function Round(dNumber As Double, iDecimals As Integer) As Variant
Dim oRound As Object
Dim vArgs(1 to 2) As Variant
oRound = createUnoService("com.sun.star.sheet.FunctionAccess")
vArgs(1) = dNumber
vArgs(2) = iDecimals
Round = oRound.callFunction("round", vArgs())
End Function
Es gibt wissenschaftliche Schreibweise auf dNumber Werte, die weniger als 0,1 statt der abgerundeten Dezimalwert, der erwartet wird.
Beispiel: msgbox (Round (0,0333333, 2))
Ergebnisse in: 3E-02.00 statt der erwarteten: 0,03
Kann mir jemand sagen, warum diese auftreten, und wenn Die Lösung, die ich unten geschrieben habe, ist der richtige Weg, um das Problem zu umgehen, oder ob es einen besseren Weg gibt?
Function Round(dNumber As Double, iDecimals As Integer) As Variant
Dim oRound As Object 'Round function object
Dim dCompNumber As Double 'Store the Compensated value of dNumber
Dim dResult As Double 'Result of the rounding to be passed
Dim vArgs(1 to 2) As Variant 'Arguments: Number to be rounded, Number of decimal places
dCompNumber = dNumber 'Copy dNumber
oRound = createUnoService("com.sun.star.sheet.FunctionAccess")
'Get access to the library that contains the Round() function
'Compensate for Scientific Notation that occurs with numbers less than 0.1
If dNumber < 0.1 Then dCompNumber = dNumber + 1 ' Add 1 to temporarily increase value > 0.1
vArgs(1) = dCompNumber
vArgs(2) = iDecimals
dResult = oRound.callFunction("round", vArgs())
'Remove the Compensation for Scientific Notation
If dNumber < 0.1 Then dResult = dResult - 1 'Subtract 1 from the temporary value so that it is back to < 0.1
Round = dResult
End Function
'Round' ist kein guter Name für Ihre Funktion, denn das ist die gleiche wie die eingebaute Funktion. –