Ik wil graag de orde van een getal bepalen, bijvoorbeeld
124 -> orde 2
3 -> orde 0
0.006 -> orde -3
34532.3453 -> orde 4
etc
normala gesproken zou je de logarithme (10 log) van zo'n getal nemen en dan het resultaat naar beneden afronden, in js:
(delen door ln 10 omdat met log eigenlijk de ln wordt uitgerekend)
maar goed, tot zover de theorie
de rpaktijk is dat ik dit in een XSL sheet wil doen en de XPath functies zijn helaas wat beperkt (je hebt eigenlijk alleen maar absolute waarde en allerlei afrond functies)
Nu heb ik voor gehele getallen al het volgende bedacht:
lekker simpel, gewoon het aantal cijfers tellen (na evt de - te hebben weggemikt) en er 1 vanaf halen.
maar hoe ga ik dit nu aanpakken met cijfers met een comma (punt in dit geval) erin? als er iets voor de comma staat, anders dan 0, dan bepaald dat getal de orde, en anders moet je dus nullen gaan tellen. Iemand een briljante ingeving hoe ik dit snel kan bepalen? Ben op zoek naar een beetje korte code, want met if statements ben ik in xsl al rap enorme lappe code kwijt.
de xsl tot nu toe:
124 -> orde 2
3 -> orde 0
0.006 -> orde -3
34532.3453 -> orde 4
etc
normala gesproken zou je de logarithme (10 log) van zo'n getal nemen en dan het resultaat naar beneden afronden, in js:
JavaScript:
1
| var order = Math.floor(Math.log(number)/Math.LN10) |
(delen door ln 10 omdat met log eigenlijk de ln wordt uitgerekend)
maar goed, tot zover de theorie
Nu heb ik voor gehele getallen al het volgende bedacht:
code:
1
| string-length(string(abs($number)))-1 |
lekker simpel, gewoon het aantal cijfers tellen (na evt de - te hebben weggemikt) en er 1 vanaf halen.
maar hoe ga ik dit nu aanpakken met cijfers met een comma (punt in dit geval) erin? als er iets voor de comma staat, anders dan 0, dan bepaald dat getal de orde, en anders moet je dus nullen gaan tellen. Iemand een briljante ingeving hoe ik dit snel kan bepalen? Ben op zoek naar een beetje korte code, want met if statements ben ik in xsl al rap enorme lappe code kwijt.
de xsl tot nu toe:
code:
1
2
3
4
5
6
7
8
9
10
11
| <xsl:template name="math:order">
<xsl:param name="number" />
<xsl:choose>
<xsl:when test="contains(string($number), '.')">
<!-- tja...-->
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="string-length(string(abs($number)))-1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template> |
[ Voor 14% gewijzigd door Verwijderd op 02-03-2006 20:07 ]