WN

WN (https://www.wn.se/forum/index.php)
-   Allmänt (https://www.wn.se/forum/forumdisplay.php?f=2)
-   -   Fördela heltal mellan 1 och 30000 på ny skala (https://www.wn.se/forum/showthread.php?t=35714)

radioaktivitet 2009-03-12 14:34

Jag har en massa heltal som är mellan 1 och 30000. Nu vill jag minska ner alla dessa tal så att de hamnar på en ny skala, mellan 1 och 10.

Alla tal som är mellan 1 och 3000 på den gamla skalan skall på den nya skalan få värdet 1. Alla mellan 3000 och 6000 skall få värdet 2 etc.

Finns det någon bra ekvation för detta? Vill helst inte skriva en massa if else satser i min kod.

Förmodligen finns det en busenkel lösning på detta. Nån som vet?

Uppdaterat: Problemet är ungefär som Googles PageRank. Alla sidor har ett PageRank värde mellan 1 och 10. Men i Googles interna system så är säkert värdet mellan 1 och 1000000. För att förenkla det hela så byter de skala när de visar upp värdet. Det är precis det jag också behöver göra.

allstars 2009-03-12 14:43

Dela med 3000 och avrunda upp till närmaste heltal.
Kod:

Function EgenAbs(Tal)
 If InStr(Tal, ",") <> "0" Then
  EgenAbs = Left(Tal, (InStr(Tal, ",") - 1))
 Else
  EgenAbs = Tal
 End If
End Function


tartareandesire 2009-03-12 14:46

Citat:

Originally posted by allstars@Mar 12 2009, 15:43
Dela med 3000 och avrunda till närmaste heltal.

Njae, dela med 3000 och avrunda uppåt (förutsatt att han vill göra som han skrivit då).

vco-systems 2009-03-12 16:29

Om du vill ha det lite mer generellt:

nytt_tal = avrunda_uppåt(gammalt_tal * nytt_max / gammalt_max)

etanders 2009-03-12 21:43

Allra enklast blir ju formeln om man använder sig av heltalsdivision. Då slippar man tänka på avrundning.

nyttTal = (gammaltTal / 3000) + 1

Det framgår inte vilket språk radioaktivitet har tänkt att göra detta i, men i många språk ger /-operatorn heltalsdivision om båda operanderna är heltal (int).

Conny Westh 2009-03-13 01:42

Håller med etanders och vill konkretisera det med ett exempel:

Kod:

' Funktion 1
' VB.NET
public function rank(ByVal heltal as integer) as integer
 * *dim kvot as integer
 * *kvot=heltal/3000+1
 * *return kvot
end function

Kod:

' Funktion 2
' VB.NET
' Mer generell kod
public function rank(ByVal heltal as integer, ByVal minRank as integer, ByVal maxRank as integer, *ByVal maxHeltal as integer) as integer
 * *dim kvot as integer
 * *kvot=heltal/(maxHeltal/maxRank)+minRank
 * *return kvot
end function

Kod:

' Funktion 3
' VB.NET
' Använd Den generella koden...
public function rank(ByVal heltal as integer) as integer
 * *return rank(heltal,1,10,30000)
end function



Alla tider är GMT +2. Klockan är nu 14:19.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson