Tot mijn grote verbazing lijkt er in .NET geen standaard implementatie te zijn om naar beneden af te ronden met tot bepaalde nauwkeurigheid. Bijvoorbeeld 1,2345 afronden naar 1,234 en -1,2345 naar -1,235. Math.Round() doet alleen banker's rounding en away from zero, maar niet simpel naar beneden. Ik heb nu zelf een work-around bedacht in de vorm van een extension method voor Double, maar dit lijkt mij een erg omslachtige methode:
Iemand iets efficienters? Alleen al die Math.Pow die een floating point operatie doet, terwijl zowel digits als 10 altijd integers zijn, en er dus altijd een integer uitkomt.
Het wordt geïmplementeerd in een nogal rekenintensieve applicatie, vandaar dat ik het zo snel mogelijk wil doen.
C#:
1
2
3
4
5
| public static double RoundDown(this double value, int digits) { double t = Math.Pow(10, digits); return Math.Floor(value * t) / t; } |
Iemand iets efficienters? Alleen al die Math.Pow die een floating point operatie doet, terwijl zowel digits als 10 altijd integers zijn, en er dus altijd een integer uitkomt.
Het wordt geïmplementeerd in een nogal rekenintensieve applicatie, vandaar dat ik het zo snel mogelijk wil doen.
[ Voor 10% gewijzigd door Verwijderd op 06-09-2008 02:32 ]