Ungefähr bei Integer

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Ungefähr bei Integer

    Hallo,

    ich möchte gerne prüfen ob ein Integerwert A ungefähr dem Integerwert B entspricht.
    Im Moment habe ich 2 Integerwerte, aber wenn ich mit < oder = prüfe dann kommt ja schon wenn ein Integerwert + oder - 1 ist false raus.

    Sagen wir ich habe den Integerwert A 4000 und Integerwert B ist 3900

    Gibt es da eine Funktion, der man vllt. einen Toleranzbereich angeben kann und dann ein Boolean erhält?

    VB.NET-Quellcode

    1. Integer.RoundAbout(IntegerWert1, IntegerWert2, Tolerance)
    sowas in der Art?

    Oder bin ich gezwungen mit Math. zu runden und dann normal zu prüfen?
    Ja, wennes dir selber machst.

    VB.NET-Quellcode

    1. Public Function EqualsTolerance(value1 As Integer, value2 As Integer, Single tolerance) As Boolean
    2. Return value2 > value1 - (value1 * tolerance) And value2 < value1 + (value1 * tolerance)
    3. End Function

    Ausm Kopp geschrieben.
    Was der Code macht:
    prüfen ob die Zahl noch im unteren Bereich der Toleranz und im oberen Bereich der Toleranz ist.
    Da gibt es wieder Fehler bei Option Strict On.
    Bei Integer würde ich direkt einen Max-Min-Bereich angeben, keinen Faktor bzw. Prozentbereich oder so.
    Das wäre dann so etwas wie ein Histogramm: Ein Quasi-Kontinuum wird in diskrete Bereiche eingeteilt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hier mal ne Extension für Numerische Werte:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module IntegerExtensions
    2. Private AllowedTypes As Type() = {GetType(Int32), GetType(Int64), GetType(UInt16), GetType(UInt32), GetType(UInt64), GetType(Double), GetType(Single)}
    3. <System.Runtime.CompilerServices.Extension()>
    4. Function IsNearly(Of T As IComparable)(ByVal Number As T, ByVal Nearly As T, ByVal Tolerance As T) As Boolean
    5. If Not AllowedTypes.Contains(GetType(T)) Then
    6. Throw New Exception("Type not Supported!")
    7. End If
    8. If Math.Abs(Convert.ToDouble(Number) - Convert.ToDouble(Nearly)) <= (Convert.ToDouble(Tolerance) + Double.Epsilon) Then
    9. Return True
    10. Else
    11. Return False
    12. End If
    13. End Function
    14. <System.Runtime.CompilerServices.Extension()>
    15. Function IsBetween(Of T As IComparable)(ByVal Number As T, ByVal Min As T, ByVal Max As T) As Boolean
    16. If Not AllowedTypes.Contains(GetType(T)) Then
    17. Throw New Exception("Type not Supported!")
    18. End If
    19. If Convert.ToDouble(Number) >= (Convert.ToDouble(Min) + Double.Epsilon) AndAlso Convert.ToDouble(Number) <= (Convert.ToDouble(Max) + Double.Epsilon) Then
    20. Return True
    21. Else
    22. Return False
    23. End If
    24. End Function
    25. End Module
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BiedermannS“ ()

    BiedermannS schrieb:

    Weil einfach, einfach zu einfach ist!
    Fehler 1 "Public Function IsNearly(Of T As System.IComparable)(Number As T, Nearly As T, Tolerance As T) As Boolean" hat mehrere Definitionen mit identischen Signaturen.
    :S
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!