Welches ist der beste Weg, um den ganzzahligen Teil von zwei Nicht-Integer-Zahlen zu vergleichen?

StackOverflow https://stackoverflow.com/questions/236323

  •  04-07-2019
  •  | 
  •  

Frage

Ich brauche den ganzzahligen Teil von zwei Doppelzimmer für Ungleichheit zu vergleichen und ich dies derzeit tun:

int iA = (int)dA;
int iB = (int)dB;

if( iA != iB )
{
    ...
}

, aber ich frage mich, ob es ein besserer Ansatz als das.

Danke.

Wenn ich Math.Truncate verwendet () anstelle einer Umwandlung in int, wäre es immer noch genau die beiden resultierenden doppelten Werte für Gleichheit vergleichen?

über die ungarische Notation Kommentare:

I HN mich nie verwenden, zumindest nicht in der Art und Weise die meisten Menschen tun. Aber dies ist einer dieser seltenen Fälle, in denen die semantische einer Variablen direkt auf seine Art bezieht. Ich hätte eine andere Syntax wie A_As_Integer und B_As_NonInteger gewählt, aber was ist der Unterschied dann gewesen wäre?

War es hilfreich?

Lösung

Verwendung Math.Truncate () d

if (Math.Truncate(x) == Math.Truncate(y))

[Bearbeiten] Realisiert, dass, wenn Sie Integer-Teile von Doppel vergleichen, Gießen Werte in int erste läuft das Risiko von Überläufen sollte Ihr verdoppelt außerhalb des Bereichs liegen, der als int dargestellt werden könnte.

Kürzen gibt entweder eine Dezimalzahl oder eine Doppel, um dieses Problem zu vermeiden.

Andere Tipps

Ja, das ist bester Ansatz.

Unter der Annahme von Ihrer Benennung in Sie hinterfragen Sie besorgt Arent über Runden ... nur das integerr Teil selbst.

dh. (Int) 4.1 erhalten das gleiche Ergebnis wie (int) 4.9

Wie Ovid erwähnt, wenn Sie nur die Variablen für den Vergleich benötigen, dann müssen Sie nur das Doppel in der Vergleichsrechnung werfen. Ich war nur in der Theorie an.

Ich persönlich versuche zusätzliche Variablen zu vermeiden, Erstellen, wenn ich sie brauche.

if ( (int)dA != (int)dB ) {
    ...
}

Als Code im Laufe der Zeit weiterentwickelt, hängt zusätzliche Variablen, die um für keinen Zweck zu Verwirrung führt. Wenn Sie diese Variablen müssen natürlich, das ist eine andere Frage:)

Side Hinweis: Sie erscheinen auf dem Datentyp zu versuchen, über eine einfache ungarische Notation andeuten. Darf ich empfehle, dass nicht? Wenn Sie Informationen zu Ihrem Variablen Präfix muss, versuchen Präfix wofür die Variable ist, anstatt seine Art. Wenn Sie das tun, Fehler im Code kann leichter sein, zu sehen:

if ( (int)ageA != (int)idB ) {
    ...
}

In diesem Fall sogar ohne zu wissen, was die Daten, zu sehen, dass Sie versuchen, ein ‚Alter‘ mit einem ‚id‘ zu vergleichen, ist ein guter Hinweis darauf, dass etwas nicht stimmt hier.

Ich bin damit einverstanden, dass Kürzen ist das, was Sie wollen.

Einige hilfreiche Informationen von MSDN :

Kürzen gibt die Anzahl, die noch bleibt, nachdem alle Nachkommastellen verworfen worden.

Es rundet auf die nächste ganze Zahl gegen Null.

double floatNumber;

floatNumber = 32.7865;
// Displays 32      
Console.WriteLine(Math.Truncate(floatNumber));

floatNumber = -32.9012;
// Displays -32       
Console.WriteLine(Math.Truncate(floatNumber));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top