Erklären Sie, warum Access.Application.Eval()
(häufig abgekürzt als Eval()
) ein anderes Ergebnis liefert als nur den ursprünglichen Ausdruck in diesem Fall zu bewerten:
EDIT: Um GSergs Antwort zu beantworten, gibt das folgende noch verschiedene Ergebnisse zurück:
%Vor%Diese Multiplikation gibt ein anderes Produkt unter Eval () zurück, aber ich verstehe nicht warum.
%Vor%Im ersten Fall ist das Produkt kleiner als 57,5, also wird Round () auf 57 abgerundet.
Im zweiten Fall ist das Produkt gleich 57,5, also wird Round () seinen Standard-Ansatz "round to even" anwenden, um 58 zu ergeben.
Bearbeiten : Sie haben alle Recht damit, dass Eval () den Literalwert in einen anderen Datentyp konvertiert.
%Vor%Ich benutze Access nicht, aber ich würde vermuten, dass das Eval den Ausdruck als Access-Ausdruck auswertet, so dass die Funktionen Round und Int anders funktionieren als die VBA-Versionen?
Ich weiß aus bitterer Erfahrung, dass die Round () - Funktion von VBA die Round-to-Even-Rounding-Methode (auch bekannt als Banker-Rundung) verwendet und nicht die häufigere Round-from-Zero-on-a-5-Methode arithmetische Rundung).
Wenn Sie den folgenden SQL-Ausdruck in Access ausführen, erhalten Sie 58:
%Vor%Wenn Sie die folgende Anweisung im direkten Fenster von Access (und für jede andere Office VBA-IDE) ausführen, erhalten Sie 57:
%Vor%Das führt mich zu der Annahme, dass VBA eine andere Möglichkeit hat, Round als Access und, wahrscheinlich anwendbarer, JET zu verwenden.
Nun, warum ist das anders? Weiß nicht ... wird jemanden mit besseren Fähigkeiten als ich nehmen.
Tags und Links vba ms-access access-vba