Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
Gebruikersavatar
DePurpereWolf
Artikelen: 0
Berichten: 9.240
Lid geworden op: wo 12 mar 2003, 19:44

Afronden

Een raar vraagje,

ik heb een aantal nummers die ik af wil ronden, maar of ik nu naar tiende, honderdste of duizendste wil afronden is afhankelijk van dat nummer.

Ofwel,

Ik wil de volgende rij getallen af laten ronden tot wat daar onder staat.

3.14, 5.69, 51.19, 333.33, 90056, 3362.3,

naar

3, 6, 50, 300, 90000, 3000

Ik wil dus maar een number hebben, met daarna eventueel nulletjes.

Normaal word het afgerond tot:

3, 6, 51, 333, 90056, en 3362

Maar dat wil ik dus niet.

Weet iemand hoe dit soort afronden heet?

Hoe kan ik dit het beste oplossen?

Het is dus niet de bedoeling dat ik handmatig ga invullen of het groter dan 10 of 100 of 1000 is.

Als daar een code voor zou zijn zou het mooi zijn.

Het gaat over een hoop data dat ik behandel in Matlab.
Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Re: Afronden

DePurpereWolf schreef:Het is dus niet de bedoeling dat ik handmatig ga invullen of het groter dan 10 of 100 of 1000 is.

Als daar een code voor zou zijn zou het mooi zijn.

Het gaat over een hoop data dat ik behandel in Matlab.
die functie noemt over het algemeen floor(x). Het is meestal hetzelfde als round(x-0.5) :) Het hangt er van af wat je wil dat er bij negatieve getallen gebeurt.
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-
Erik Leppen
Artikelen: 0
Berichten: 373
Lid geworden op: za 05 mei 2007, 11:41

Re: Afronden

Nee, het is juist niet floor. Want floor(3362.3) is gewoon 3362, en floor(5,69) = 5.

Wat ik gewoon zie is afronden op één significant cijfer.

Of als je het in een formule wilt stoppen, dan is het x afgerond op veelvouden van
\(10^{\lfloor ^{10} \log x\rfloor}\)
Aangezien x afronden op veelvouden van y hetzelfde is als

y * round(x/y)

is de formule die je zoekt:
\(10^{\lfloor ^{10} \log x\rfloor} \cdot \mathrm{round}(\frac{x}{10^{\lfloor ^{10} \log x\rfloor}})\)
Edit: getuige ook 10^ floor(log x / log 10) * round(x / (10^ floor(log x / log 10) )) op Wolfram|Alpha

Edit: een functie waarvan de grafiek een fractal is :)
Gebruikersavatar
Drieske
Artikelen: 0
Berichten: 10.179
Lid geworden op: za 12 jul 2008, 17:07

Re: Afronden

Even een vraagje. Begrijp ik het juist dat je 56 dan zou willen afronden op 60?
Zoek je graag naar het meest interessante wetenschapsnieuws? Wij zoeken nog een vrijwilliger voor ons nieuwspostteam.
Gebruikersavatar
DePurpereWolf
Artikelen: 0
Berichten: 9.240
Lid geworden op: wo 12 mar 2003, 19:44

Re: Afronden

Je hebt het aan het juiste eind Erik Leppen. je formule is inderdaad iets wat ik zoek.

De achtergrond is dat ik een schaalbalk op een gemaakte (microscoop) foto wil aanbrengen die rond de 100 pixels lang moet zijn en de correcte lengte moet aangeven. Dan is het goed als het op een mooi getal word afgerond.
Gebruikersavatar
DePurpereWolf
Artikelen: 0
Berichten: 9.240
Lid geworden op: wo 12 mar 2003, 19:44

Re: Afronden

Voor de geinteresseerde,

Dit is de matlab code die ik nu gebruik, en lijkt goed te werken.

Ik heb een fractie aangegeven, 4, want afronden op kwartalen is ook goed. Op die manier zijn de balk lengtes wat dichter bij elkaar.

Code: Selecteer alles

% Make scalebar from magnification

fr = 4; % fractions of 4 are okay to round off to.

sb = 95; % Max scalebar length in pixels

xx = scalemag*fr*sb;

% real bar length in micron

reall = power(10,(floor(log10(xx)/log10(10)))).*round(xx./power(10,(floor(log10(xx)/log10(10)))))/fr; 

% pixel length of bar

pixell = reall./scalemag;

Terug naar “Wiskunde”