I format a float to a locale string (Euro) and there are very different results in every browser. Is it possible to fix without an own function?
var sum=2282.0000;
var formated_sum = Number(sum.toFixed(2)).toLocaleString("de-DE", {style: "currency", currency: "EUR"});
Firefox result: 2.282,00 €
Chrome result: 2.282 €
IE result: 2.282,00 €
Safari result: 2282 €
Safari results are very much wrong, chrome results are not so much bad.
Any Idea how to fix that without writing an own function for formatting?
This question may already have an answer here:
Inconsistent behavior of toLocaleString() in different browser
No, my question is different because i am searching for a solution for Currency, not DATE
ECMA 262 specifies that the function is implementation dependent and takes no arguments.
Produces a String value that represents this Number value formatted
according to the conventions of the host environment’s current locale.
This function is implementation-dependent, and it is permissible, but
not encouraged, for it to return the same thing as toString.
NOTE The first parameter to this function is likely to be used in a
future version of this standard; it is recommended that
implementations do not use this parameter position for anything else.
It is also in ECMA internationalization API specification (which for Number.prototype.toLocaleString
supersedes ECMA 262 but accepts 2 arguments)
This definition supersedes the definition provided in ES5, 15.7.4.3.
When the toLocaleString method is called with optional arguments
locales and options, the following steps are taken:
Let x be this Number value (as defined in ES5, 15.7.4). If locales is
not provided, then let locales be undefined. If options is not
provided, then let options be undefined. Let numberFormat be the
result of creating a new object as if by the expression new
Intl.NumberFormat(locales, options) where Intl.NumberFormat is the
standard built-in constructor defined in 11.1.3. Return the result of
calling the FormatNumber abstract operation (defined in 11.3.2) with
arguments numberFormat and x. The value of the length property of the
toLocaleString method is 0.
Besides, mdn specifies that Safari has no support for it.
As for a viable solution see this answer on SO
I've worked around this using the Number.toLocaleString-with-Locales shim
It's simple, very lightweight, and quite sufficient for my needs.
Accounting.js as mentioned by Reeno is the solution! Thanks Reeno!