By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,848 Members | 3,143 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,848 IT Pros & Developers. It's quick & easy.

FAQ Topic - How do I convert a Number into a String with exactly 2 decimal places? (2008-10-29)

P: n/a
-----------------------------------------------------------------------
FAQ Topic - How do I convert a Number into a String with
exactly 2 decimal places?
-----------------------------------------------------------------------

When formatting money for example, to format 6.57634 to
6.58, 6.5 to 6.50, and 6 to 6.00?

Rounding of x.xx5 is uncertain, as such numbers are not
represented exactly. See the section on "simple decimal arithmetic"
for Rounding issues.

` N = Math.round(N*100)/100 ` only converts N to a Number of value
close to a multiple of 0.01; but ` document.write(N) ` does not give
trailing zeroes.

ECMAScript Ed. 3.0 (JScript 5.5 [but buggy] and JavaScript 1.5)
introduced ` Number.prototype.toFixed `, the main problem
with this is the bugs in JScript's implementation.

Most implementations fail with certain numbers, for example 0.07.
The following works successfully for ` M>0, N>0: `

function Stretch(Q, L, c) { var S = Q
if (c.length 0) {
while (S.length < L) {
S = c+S;
}
}
return S;
}

function StrU(X, M, N) { // X>=0.0
var T, S = String(Math.round(X * Number("1e" + N)));
if (S.search && S.search(/\D/) != -1) {
return '' + X;
}
with (String(Stretch(S, M+N, '0')))
return substring(0, T = (length-N)) + '.' + substring(T);
}

function Sign(X) {
return X 0 ? "+" : X < 0 ? "-" : " ";
}

function StrS(X, M, N) {
return Sign(X) + StrU(Math.abs(X), M, N);
}

Number.prototype.toFixed = function(n){
return StrS(this, 1, n);
};

http://www.merlyn.demon.co.uk/js-round.htm

http://msdn2.microsoft.com/en-us/library/sstyff0z.aspx
--
Postings such as this are automatically sent once a day. Their
goal is to answer repeated questions, and to offer the content to
the community for continuous evaluation/improvement. The complete
comp.lang.javascript FAQ is at http://jibbering.com/faq/index.html.
The FAQ workers are a group of volunteers. The sendings of these
daily posts are proficiently hosted by http://www.pair.com.

Oct 29 '08 #1
Share this Question
Share on Google+
2 Replies


P: n/a
In comp.lang.javascript message <49***********************@news.sunsite.
dk>, Wed, 29 Oct 2008 00:00:02, FAQ server <ja********@dotinternet.be>
posted:

And did so in a very timely manner, the topic having been raised in the
"JavaScript Math vs Excel" thread.
>FAQ Topic - How do I convert a Number into a String with
exactly 2 decimal places?
...
>http://www.merlyn.demon.co.uk/js-round.htm
To that line should be appended an indication that the logically-
following pages should also be read; my current StrU is in the next.
I'd just append either " ff." or " /ff./", expecting readers to
understand it. YMMV.

The functions are the FAQ are NOT what I presently use. My present
ones, StrU ff. at <URL:http://www.merlyn.demon.co.uk/js-rndg1.htm#GC>
give the called-for not-too-big numeric fixed-point decimal result when
possible, and otherwise indicate exactly what the input value was,
including both Infinities, NaN, null, undefined - and with the correct
number of spaces, if necessary (the string may be too long, but not too
short). I was about to assert that they thereby cover all
possibilities, when I realised that there was one omission - and that I
could easily fix it.

I'll let you all think about it for a bit ...

--
(c) John Stockton, near London. *@merlyn.demon.co.uk/?.**********@physics.org
Web <URL:http://www.merlyn.demon.co.uk/- FAQish topics, acronyms, & links.
Correct <= 4-line sig. separator as above, a line precisely "-- " (SoRFC1036)
Do not Mail News to me. Before a reply, quote with ">" or "" (SoRFC1036)
Oct 29 '08 #2

P: n/a
In comp.lang.javascript message <QE**************@invalid.uk.co.demon.me
rlyn.invalid>, Wed, 29 Oct 2008 20:13:12, Dr J R Stockton
<jr*@merlyn.demon.co.ukposted:
>>FAQ Topic - How do I convert a Number into a String with
exactly 2 decimal places?
>The functions are the FAQ are NOT what I presently use. My present
ones, StrU ff. at <URL:http://www.merlyn.demon.co.uk/js-rndg1.htm#GC>
...
I was about to assert that they thereby cover all
possibilities, when I realised that there was one omission - and that I
could easily fix it.

I'll let you all think about it for a bit ...
Over two days have elapsed. Neither the routines in the FAQ, nor any
others that I had seen (my own included) up to Wednesday evening, can
represent the difference between +0 and -0.

The present FAQ routines give a leading space for +0 and -0, and an
appropriate sign for all other numbers, including infinities and those
which round to zero.

To get a signed zero, replace function Sign with
function Sygn(X) { return X + 1/X 0 ? "+" : "-" }

So, in the FAQ, keep Sign (being more commonly wanted?), but give Sygn
as well.

The FAQ routines survive missing arguments. They also survive the first
argument being a Function, Array, or Object. I have been wondering
whether what they then do can be improved without adding too much code.

The FAQ is now visible at the URL in FAQ 9.91 :-) .

--
(c) John Stockton, nr London UK. ?@merlyn.demon.co.uk BP7, Delphi 3 & 2006.
<URL:http://www.merlyn.demon.co.uk/TP/BP/Delphi/&c., FAQqy topics & links;
<URL:http://www.bancoems.com/CompLangPascalDelphiMisc-MiniFAQ.htmclpdmFAQ;
NOT <URL:http://support.codegear.com/newsgroups/>: news:borland.* Guidelines
Nov 1 '08 #3

This discussion thread is closed

Replies have been disabled for this discussion.