webForumDet fria alternativet

cint + avrundningsfel

ASP

12 svar · 794 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Jag får 4 och 4 med denna kod, hur kommer det sig?

<%= Cint(3.5) %>
<%= Cint(4.5) %>
Medlem sedan juni 20019 519 inlägg
#2

round ? om du ska avrunda?

Medlem sedan dec. 2006382 inlägg
#3

Prova detta...

<%= CInt(Round(3.5, 0)) %>
<%= CInt(Round(3.5, 0)) %>

EDIT: Fasen också. Inte tillräckligt snabb i fingrarna idag. :P

Medlem sedan maj 200010 687 inlägg
#4

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) )
Medlem sedan juni 20003 076 inlägg
#5

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! :)

Medlem sedan juni 20019 519 inlägg
#6

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?

Medlem sedan juni 20014 290 inlägg
#7

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.

Medlem sedan juni 200032 967 inlägg
#8

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.

Medlem sedan juni 20003 076 inlägg
#9

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! ;)

Medlem sedan maj 200010 687 inlägg
#10

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

Medlem sedan dec. 20025 483 inlägg
#11

Erik Juhlin skrev:

Avrundningen sker till närmaste heltal. Inte närmaste heltal.

Hmm ;)

Medlem sedan maj 200010 687 inlägg
#12

Skrev fel. Sen gick visst wF ner för en liten stund...

Medlem sedan juni 20003 076 inlägg
#13

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! :)

267 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)