round ? om du ska avrunda?
cint + avrundningsfel
12 svar · 794 visningar · startad av doggelito
Prova detta...
<%= CInt(Round(3.5, 0)) %>
<%= CInt(Round(3.5, 0)) %>
EDIT: Fasen också. Inte tillräckligt snabb i fingrarna idag. :P
Round gör på samma sätt. Vid .5 så avrundar den till det jämna talet.
Ett quick & dirty sätt som alltid avrundar uppåt vid .5:
Response.Write CLng( FormatNumber(3.5, 0) )
Response.Write CLng( FormatNumber(4.5, 0) )
Nej, nej, alltså jag vill bara veta hur det kommer sig att cint avrundar i mina ögon helt ologiskt då 3,5 och 4,5 blir 4!
Jag har aldrig sett det förrut! :)
ring MS och fråga? :P
Nej sökte lite på google:
http://www.xbeat.net/vbspeed/i_BankersRounding.htm
http://p2p.wrox.com/topic.asp?TOPIC_ID=3125
Kanske kan ge något bättre svar?
Jag fick en gång i forntiden att ,5 alltid skall avrundas till jämnt tal, så att 3,5 och 4,5 avrundas till 4 är enligt dessa regler helt riktigt.
Fel och fel...
Jag tror nog de flesta avrundningar som görs av ett programspråk el. dyl. fungerar på detta vis.
Läs om "Round to even" på exempelvis wikipedia.
Wikipedia skrev:
When dealing with large sets of scientific or statistical data, where trends are important, traditional rounding on average biases the data upwards slightly. Over a large set of data, or when many subsequent rounding operations are performed as in digital signal processing, the round-to-even rule tends to reduce the total rounding error, with (on average) an equal portion of numbers rounding up as rounding down. This generally reduces the upwards skewing of the result.
Happ, då har man lärt sig nått nytt idag också då! :)
Att avrundning sker till närmaste jämna heltal och inte till närmaste heltal.
Jag har inte riktigt greppat varför detta fenomen, hade jag uppfunnit avrundningen så hade jag velat haft det till närmaste heltal, men det är säkert bra som det är nu! ;)
Nu har du nog missuppfattat det hela.
Avrundningen sker till närmaste heltal. Inte närmaste jämna heltal. Vid ,5 så finns det dock inget som är närmst och då kan man t.ex. alltid avrunda uppåt eller avrunda till det jämna talet.
3,4 > 3
3,5 > 4
3,6 > 4
4,4 > 4
4,5 > 4
4,6 > 5
Skrev fel. Sen gick visst wF ner för en liten stund...
Erik Juhlin skrev:
Avrundningen sker till närmaste heltal. Inte närmaste jämna heltal.
Lite otydligt av mig, självklart förstår jag att 4,6 blir 5. Det var just vid .5 jag menade.
Erik Juhlin skrev:
Vid ,5 så finns det dock inget som är närmst och då kan man t.ex. alltid avrunda uppåt eller avrunda till det jämna talet.
Nja, kan och kan, det var just det! Detta styr man ju inte själv då cint rundar 3,5 och 4,5 till 4 och inte till 4 respektive 5 (som jag alltid trott att det var).
Visst, man kan bygga egna funktioner eller köra formatnumber först på talet för att få det tal man önskar men det var inte det som var grejjen.
Grejjen var att jag inte hade en aning om att det fanns olika avrundningsmetoder och vbscript och de flesta språk tydligen använder bankens metod! :)
Tycka vad man vill om det men det är säkert rätt! :)



