FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
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. |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Klarade millennium-buggen
|
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 |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Supermoderator
|
Citat:
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Mycket flitig postare
|
Om du vill ha det lite mer generellt:
nytt_tal = avrunda_uppåt(gammalt_tal * nytt_max / gammalt_max) |
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
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). |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Klarade millennium-buggen
|
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 |
||
![]() |
![]() |
Svara |
|
|