Velocity Reviews > about rounding a number

Ricardo Garcia
Guest
Posts: n/a

 10-24-2004
hi, i have some file size in bytes, and i want to get it in KB or MB, with
one decimal digit,
for example:
1268777 -> 1.2 MB

now i can have 1.210000...
my question is how do you can round this number properly, if i use
Math.round(number), i only get 1 MB

Thanks

Evertjan.
Guest
Posts: n/a

 10-24-2004
Ricardo Garcia wrote on 24 okt 2004 in comp.lang.javascript:

> hi, i have some file size in bytes, and i want to get it in KB or MB,
> with one decimal digit,
> for example:
> 1268777 -> 1.2 MB
>
> now i can have 1.210000...
> my question is how do you can round this number properly, if i use
> Math.round(number), i only get 1 MB
>

n = 1268777 // Bytes
n = Math.round(n/100000)/10 // 1.3 MegaBytes

BUT, perhaps you really want:

n = 1268777 // Bytes
n = Math.round(n*10/1024/1024)/10 // 1.2 MegaBytes

--
Evertjan.
The Netherlands.
but let us keep the discussions in the newsgroup)

Dr John Stockton
Guest
Posts: n/a

 10-25-2004
JRS: In article <Xns958CE310B3517eejj99@194.109.133.29>, dated Sun, 24
Oct 2004 20:19:12, seen in news:comp.lang.javascript, Evertjan.
<(E-Mail Removed)> posted :
>Ricardo Garcia wrote on 24 okt 2004 in comp.lang.javascript:
>
>> hi, i have some file size in bytes, and i want to get it in KB or MB,
>> with one decimal digit,
>> for example:
>> 1268777 -> 1.2 MB
>>
>> now i can have 1.210000...
>> my question is how do you can round this number properly, if i use
>> Math.round(number), i only get 1 MB
>>

>
>n = 1268777 // Bytes
>n = Math.round(n/100000)/10 // 1.3 MegaBytes
>
>BUT, perhaps you really want:
>
>n = 1268777 // Bytes
>n = Math.round(n*10/1024/1024)/10 // 1.2 MegaBytes

Those round to a multiple of 0.1 (give or take the resolution of an IEEE
Double); but rounding to a given number of digits is another matter
entirely.

The OP's wording calls for 1 MB to be represented as the string 1.0 MB.

The OP needs to read the newsgroup FAQ (via below), in particular Sec.
4.6; the first link of that leads to a variety of rounding code,
originated by several authors.

However, the example given implies truncation, for which (at least in
MSIE4) a RegExp might be used :
x = "000001.98765".match(/.*\.\d/) // 000001.9
x = 000001.98765 ; x = String(x).match(/.*\.\d/) // 1.9
though something must be done to ensure a decimal point and sufficient
digits.
x = 000001.00 ; x = String(x).match(/.*\.\d/) || x+".0" // 1.0

--
<URL:http://www.jibbering.com/faq/> JL/RC: FAQ of news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.

Evertjan.
Guest
Posts: n/a

 10-25-2004
Dr John Stockton wrote on 25 okt 2004 in comp.lang.javascript:
> Those round to a multiple of 0.1 (give or take the resolution of an IEEE
> Double); but rounding to a given number of digits is another matter
> entirely.

I don't quite see that, John.

Rounding 3 to 4 decimals is simply 3, not 3.0000,
because rounding is a mathematical concept and does not involve the string
representation of the result.

> The OP's wording calls for 1 MB to be represented as the string 1.0 MB.

I agree, that is another view of the matter on hand entirely.

--
Evertjan.
The Netherlands.
but let us keep the discussions in the newsgroup)