2016-06-30 12 views
1

Hallo Fellow stackoverflowers Aufrunden,VB Script Integer-Division vs Float der Division

Ich habe ein Problem mit einer Formel aus classic aspVBscript-C# .net Umwandlung Ich brauche c# auf das Ergebnis der VBScript

ähnlich zu verhalten die Formel

so geht

Dim dTravelHours, result 
dTravelHours = 22.7359890666919 
result = (CDbl(dTravelHours)*2 + 2)\8 

Mathematisch ist das Ergebnis 5,9331475 aber da ich eine ganze Zahl Divi verwendet sion statt Dezimalteilung „/“ Das Ergebnis ist 5, ich dieses Ergebnis in C# richtig bekommen kann einfach durch das Ergebnis Typumwandlung

jedoch in int, wenn ich einen anders Wert verwendet:

Dim dTravelHours, result 
    dTravelHours = 22.7359890666919 
    result = (CDbl(dTravelHours)*2 + 2.5)\8 

die mathematischen Ergebnis ist 5.9956475 und vbScript Ergebnis ist 6

das gleiche mit 5,9456475 dem vbscript Ergebnis 6

Wie kann ich das gleiche Verhalten in C# replizieren? Ich habe schon versucht mit Math.Floor,Math.Ceiling, Math.Round aber immer noch nicht gut.

Vielen Dank im Voraus für Ihre Antworten und Anregungen

+0

Math.Ceiling (5,9956475) 6, das ist, was Sie mit der rechten wollen? –

+0

Ja das ist korrekt, aber in VBScript 5.9331475 ist 5, da es Ganzzahl Divison verwendet, aber 5.9956475 ist 6, wenn ich einfach Ceiling in C# verwenden wird beide ein Ergebnis von 6 haben, das ist nicht das gleiche Ergebnis mit dem in VBScript, – GulpasaurusRex

+0

Also 5.9331475 sollte 5 und 5.9456475 sollte 6 sein? Was ist die Regel dafür? –

Antwort

0

Wie MSDN die VbScript heißt integer division operato r auf diese Weise durchgeführt wird:

Das Ergebnis der ganzzahlige Quotient aus Nummer1 durch number2 geteilt ist. Der Ganzzahlquotient verwirft jeden Rest und behält nur den ganzzahligen Teil bei. Bevor die Division ausgeführt wird, werden numerische Ausdrücke auf Byte-, Integer- oder Long-Subtypausdrücke gerundet .

Round wird auf diese Weise umgesetzt: es ganze Zahlen standardmäßig zurück und rundet die Hälfte auf gerade oder Abrundung des Bankers (Standard in C#).

So können Sie diese C# Version verwenden mit Math.Round und Integer-Division:

double value = 22.7359890666919; 
double calculationResult1 = value * 2 + 2.0; 
double calculationResult2 = value * 2 + 2.5; 
double rounded1 = Math.Round(calculationResult1); // 47 
double rounded2 = Math.Round(calculationResult2); // 48 
int result1 = (int)rounded1/8; // 5 
int result2 = (int)rounded2/8; // 6 
+0

Wow Tim!Dachte nie, ich habe nur die Formel in Math.Round vor der Division durch 8 getrennt und es hat funktioniert! Vielen Dank! – GulpasaurusRex