חישוב דולרים בשאילתה באקסס
-
יש לי טבלה עם פרטי תשלום
יש שם שדה של סכום ושדה של מטבע
בבונה השאילתות כתבתי כךהסכום בשקלים לאחר חישוב דולרים: Round([סכום]*[הזן שער הדולר],3)
עכשיו כשאני פותח את השאילתה קופץ לי חלון להזין את שער הדולר - וזה מציג לי בשדה את הסכום לאחר חישוב הדולרים
אני רוצה לעשות שאם בשדה מטבע כתוב $ שיכפיל את הסכום לפי הפרמטר שאני מכניס עם פתיחת השאילתה
ואם בשדה מטבע כתוב ₪ שיציג את הסכום בלי הכפלה -
@איש-ימיני
קבל 2 הארות קטנות.- בחישוב השקל אין צורך להכפיל ב 1, זה נותן את אותה תוצאה של הערך ללא ההכפלה.
- הפונקציה Round עושה עיגול לפי כלל שנקרא עיגול בנקאי וזה לא העיגול המצוי שאנחנו רגילים להשתמש בו.
מומלץ להשתמש בפונקציה מותאמת אישית מכאן
' This function overcomes the bankers Rounding that occurs in the ' built-in VBA Round function to provide true (symmetric) numeric Rounding ' Created by TechOnTheNet.com Public Function StandardRound(pValue As Double, pDecimalPlaces As Integer) As Variant Dim LValue As String Dim LPos As Integer Dim LNumDecimals As Long Dim LDecimalSymbol As String Dim QValue As Double ' Return an error if the decimal places provided is negative If pDecimalPlaces < 0 Then StandardRound = CVErr(2001) Exit Function End If ' If your country uses a different symbol than the "." to denote a decimal ' then change the following LDecimalSymbol variable to that character LDecimalSymbol = "." ' Determine the number of decimal places in the value provided using ' the length of the value and the position of the decimal symbol LValue = CStr(pValue) LPos = InStr(LValue, LDecimalSymbol) LNumDecimals = Len(LValue) - LPos ' Round if the value provided has decimals and the number of decimals ' is greater than the number of decimal places we are rounding to If (LPos > 0) And (LNumDecimals > 0) And (LNumDecimals > pDecimalPlaces) Then ' Calculate the factor to add QValue = (1 / (10 ^ (LNumDecimals + 1))) ' Symmetric rounding is commonly desired so if the value is ' negative, make the factor negative ' (Remove the following 3 lines if you require "Round Up" rounding) If (pValue < 0) Then QValue = -QValue End If ' Add a 1 to the end of the value (For example, if pValue is 12.65 ' then we will use 12.651 when rounding) StandardRound = Round(pValue + QValue, pDecimalPlaces) ' Otherwise return the original value Else StandardRound = pValue End If End Function
לשימוש בפונקציה, אתה פשוט מדביק את הקוד לעיל במודול כלשהו
ומחליף את המילה Round ל StandardRoundבהצלחה
-
@אבי אמר בחישוב דולרים בשאילתה באקסס:
הפונקציה Round עושה עיגול לפי כלל שנקרא עיגול בנקאי וזה לא העיגול המצוי שאנחנו רגילים להשתמש בו.
מומלץ להשתמש בפונקציה מותאמת אישיתלענ"ד דווקא העיגול הבנקאי הרגיל מומלץ יותר, בפרט בסכומי מטבע.
הסיבה שבחרו באלגוריתם העיגול הזו והטמיעו אותו באקסס וב .NET כברירת מחדל, היא שבחישוב סכומים של שדות מעוגלים הוא אמור לתת סכום יותר קרוב לאמת מאשר העיגול ה"רגיל" כלפי מעלה (AwayFromZero), כי הפיזור של הסטיות מתחלק באופן יותר אחיד.