Kom ihåg mig?
Home Menu

Menu


Fördela heltal mellan 1 och 30000 på ny skala

Ämnesverktyg Visningsalternativ
Oläst 2009-03-12, 14:34 #1
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
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.
radioaktivitet är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-12, 14:43 #2
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
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
allstars är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-12, 14:46 #3
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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å).
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-12, 16:29 #4
vco-systemss avatar
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 774
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
vco-systemss avatar
 
Reg.datum: Dec 2004
Inlägg: 774
Om du vill ha det lite mer generellt:

nytt_tal = avrunda_uppåt(gammalt_tal * nytt_max / gammalt_max)
vco-systems är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-12, 21:43 #5
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
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).
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-13, 01:42 #6
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 08:57.

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