FAQ Topic - How do I convert a Number into a String with exactly 2 decimal places? (2007-12-15) - Javascript

This is a discussion on FAQ Topic - How do I convert a Number into a String with exactly 2 decimal places? (2007-12-15) - Javascript ; ----------------------------------------------------------------------- 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 ...

+ Reply to Thread
Results 1 to 4 of 4

FAQ Topic - How do I convert a Number into a String with exactly 2 decimal places? (2007-12-15)

  1. Default FAQ Topic - How do I convert a Number into a String with exactly 2 decimal places? (2007-12-15)

    -----------------------------------------------------------------------
    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 section 4.7 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 N.toFixed, the main problem with this is the bugs in
    JScripts 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=new String(Math.round(X*Number("1e"+N)))
    if (S.search && S.search(/\D/)!=-1) { return ''+X }
    with (new 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://msdn.microsoft.com/library/de...34c0f6d6f0.asp


    --
    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.


  2. Default Re: FAQ Topic - How do I convert a Number into a String with exactly 2 decimal places? (2007-12-15)

    In comp.lang.javascript message <47631908$0$90270$14726298@news.sunsite.
    dk>, Sat, 15 Dec 2007 00:00:01, FAQ server <javascript@dotinternet.be>
    posted:
    >
    > function Stretch(Q, L, c) { var S = Q
    > if (c.length>0) while (S.length<L) { S = c+S }

    ^^^^^^^^^^^^^^^ That seems unnecessary in this context. Indeed, the
    loop could be incorporated in StrU.

    > return S
    > }
    > function StrU(X, M, N) { // X>=0.0
    > var T, S=new String(Math.round(X*Number("1e"+N)))

    ^^^^^^^^^^^^^^ Math.pow is better
    > if (S.search && S.search(/\D/)!=-1) { return ''+X }

    No need to .search; /\D/.test(St) is simpler
    It would be better to left-pad that return value to width M+N+1

    > with (new String(Stretch(S, M+N, '0')))

    ^^^^ ISTR an expressed dislike of using with.
    ^^^ ^^^^^^ there should be no need for a new string.

    > return substring(0, T=(length-N)) + '.' + substring(T)
    > }



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

    Tatty spacing.

    --
    (c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v6.05 MIME.
    <URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/&c., FAQqy topics & links;
    <URL:http://www.merlyn.demon.co.uk/clpb-faq.txt> RAH Prins : c.l.p.b mFAQ;
    <URL:ftp://garbo.uwasa.fi/pc/link/tsfaqp.zip> Timo Salmi's Turbo Pascal FAQ.

  3. Default Re: FAQ Topic - How do I convert a Number into a String with exactly2 decimal places? (2007-12-15)

    Dr J R Stockton wrote:

    [...]

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

    >
    > Tatty spacing.


    Maybe this is an occasion on how whitespace (and by extension) line-
    end are handled in the daily FAQ-postings.

    The nature of the application requires to start from
    http://www.jibbering.com/faq/index.xml with all whitespaces and line-
    ends as written in the source code.

    This is not like browser displays where whitespace and EOL are treated
    differently.

    I had invented the following regular expressions in order to obtain a
    (IMO) best possible Usenet-display:

    "p" => "\n",
    "/p" => "\n",
    "em" => "_",
    "/em" => "_",
    "url" => "\n\n",
    "/url" => "\n\n",
    "ul" => "\n",
    "/ul" => "\n",
    "li" => "* ",
    "/li" => "",
    "moreinfo" => "\n\n",
    "/moreinfo" => "\n\n",
    "resource" => "\n\n",
    "/resource" => "\n\n",
    "icode" => "` ",
    "/icode" => " `",
    "code" => "\n\n",
    "/code" => "\n\n",

    Additional rules:
    - If more than three successive end-of-lines characters occur, they
    are replaced by two.
    - Six trailing spaces are removed.
    - End-of-lines at the beginning an end of every message are removed.

    Sometimes this may lead to less-than-optimal results, but I'm afraid
    there is no other possibility because the application needs some rules
    anyway how it should display the input stream.

    Quick link to the results:
    http://groups.google.com/groups/sear...t.be&scoring=d

    For all clarity, this does not apply to the code line that you
    mentioned as this is literally the same as the source.

    --
    Bart

  4. Default Re: FAQ Topic - How do I convert a Number into a String with exactly2 decimal places? (2007-12-15)

    Bart Van der Donck wrote:

    > Additional rules:
    > - If more than three successive end-of-lines characters occur, they
    > are replaced by two.
    > - Six trailing spaces are removed.


    I meant leading spaces.

    --
    Bart

+ Reply to Thread

Similar Threads

  1. Replies: 2
    Last Post: 10-13-2007, 05:06 AM
  2. Replies: 0
    Last Post: 08-14-2007, 06:00 PM
  3. Replies: 0
    Last Post: 06-13-2007, 06:00 PM
  4. Replies: 1
    Last Post: 04-29-2007, 03:00 PM
  5. Replies: 1
    Last Post: 04-15-2007, 11:30 AM