C# Prozente aus negativen sbyte berechnen

Gast #4662807
Lesenswert?

Ich habe da einen Denkfehler...

Ich habe eine sbyte Variable welche Werte im Bereicht von -120 bis 120 
enthält. Ich würde gerne diesen Wert in Prozent umrechnen, mit einem 
einfachen Dreisatz komm ich da nun leider nicht ran. Umwandeln in ein 
byte geht ja auch nicht, da ich dann über den Overflow komme. Stehe da 
gerade auf dem Schlauch.
Gast #4662811
Lesenswert?

Draco schrieb:
> Jim M. schrieb:
>> Ansonsten: (Wert + 120)/2,4
>
> Doof... ja stimmt :-D

Geht auch nicht, da ich ja dann bei -50%... das ist ja das Problem wovor 
ich stehe, ich überlege mir gerade schon einfach eine temporäre byte 
Variable zu machen, den sbyte+120 dahinein schiebe und dann mit dem 
Bereich von 0-240 über die byte Variable rechne, wird wohl das 
einfachste sein.
Gast #4662954
Lesenswert?

Zack schrieb:
> Ausprobieren...

Es geht. Beispiel:
1
for (int i = -120; i <= 120; i += 10)
2
{
3
  sbyte wert = (sbyte)i;
4
  sbyte prozent = (sbyte)(wert / 2.4 + 50);
5

6
  Console.WriteLine(string.Format("{0} -> {1}%", wert, prozent));
7
}

Ausgabe:
1
-120 -> 0%
2
-110 -> 4%
3
-100 -> 8%
4
-90 -> 12%
5
-80 -> 16%
6
-70 -> 20%
7
-60 -> 25%
8
-50 -> 29%
9
-40 -> 33%
10
-30 -> 37%
11
-20 -> 41%
12
-10 -> 45%
13
0 -> 50%
14
10 -> 54%
15
20 -> 58%
16
30 -> 62%
17
40 -> 66%
18
50 -> 70%
19
60 -> 75%
20
70 -> 79%
21
80 -> 83%
22
90 -> 87%
23
100 -> 91%
24
110 -> 95%
25
120 -> 100%

Der Typ der Division ist ein double. Daher noch der Cast zum sbyte, der 
die Nachkommastellen abschneidet. Eventuell möchte man lieber runden...
Gast #4662956
Lesenswert?

Ben S. schrieb:
> Ich hätte das einfach in ein unsignet byte umgewandelt und dann
> gerechnet
> byte = sbyte + 120;

Ja mach ich auch nun so:

Draco schrieb:
> ...ich überlege mir gerade schon einfach eine temporäre byte
> Variable zu machen, den sbyte+120 dahinein schiebe und dann mit dem
> Bereich von 0-240 über die byte Variable rechne, wird wohl das
> einfachste sein...
Gast #4663489
Lesenswert?

Egal, da es durch die Division ein double wird. Davon ab funktioniert 
die Schleife mit dem sbyte nicht wie gewünscht. Der Nach dem 120er 
Durchlauf wird value um 10 erhöht und es findet ein Überlauf statt. Der 
Wert ist nun negativ und die Schleife macht weiter.
#4663509
Lesenswert?

Zack schrieb:
> Egal, da es durch die Division ein double wird.

Quatsch. Wenn zwei integers dividiert werden findet eine 
Integer-dividierung statt, nix float oder double.

> Davon ab funktioniert
> die Schleife mit dem sbyte nicht wie gewünscht. Der Nach dem 120er
> Durchlauf wird value um 10 erhöht und es findet ein Überlauf statt. Der
> Wert ist nun negativ und die Schleife macht weiter.

Getroffen, Sherlock. Aber das lässt sich mit einem "<" statt "<=" lösen.
Gast #4663699
Lesenswert?

Eric B. schrieb:
> Wenn zwei integers dividiert werden findet eine
> Integer-dividierung statt, nix float oder double.
Klar, aber da die Teilung durch einen double einen double ergibt (mein 
Beispiel), ist es egal. Der Cast zum sbyte bleibt - ob vom int oder vom 
double.

> Aber das lässt sich mit einem "<" statt "<=" lösen.
Watson, wie erreichen Sie dann value==120? Nur Spass - ist auch egal, da 
es doch nur ein Beispiel ist. Also mal locker durch die Hose atmen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren