如何修改现有的 javascript 以显示包括美分在内的货币值


How do I amend an existing javascript to display currency values including cents?

我正在研究的网站(我继承了...我不太了解javascript)的代码当前设置为在数据库中任何数字的末尾显示".00"(实际上是PHP包含页面),以便它在在线表单上显示为货币。

我的客户现在想在列表中添加一个金额,其中包括美分($ 5.50),我需要帮助修改或修改脚本,以便我可以包括这些非整数货币金额。

以下是(我认为/假定)解决货币格式的脚本片段:

function CurrencyFormatted(amount)
{
    var i = parseFloat(amount);
    if(isNaN(i)) { i = 0.00; }
    var minus = '';
    if(i < 0) { minus = '-'; }
    i = Math.abs(i);
    i = parseInt((i + .005) * 100);
    i = i / 100;
    s = new String(i);
    if(s.indexOf('.') < 0) { s += '.00'; }
    if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
    s = minus + s;
    return s;
}

有没有办法添加或更改此代码,以便我可以显示此(以及未来类似)金额所需的特定美分?

该代码正在做一些有趣的舍入操作,我无法真正解决,但是要在小数点右侧使用固定位数格式化数字,请在数字上使用toFixed函数:

var n = 1.2345;
n.toFixed(2); // "1.23"

请注意,它进行舍入,因此:

(1.234).toFixed(2); // "1.23"
(1.235).toFixed(2); // "1.24"

(在变量上调用toFixed时不需要括号,但在文本上调用它时确实需要它们,就像我在上面的两个示例中所做的那样。当然,在您的情况下,您将使用变量,因此不需要它们。


在下面重新发表您的评论/问题:

感谢您的快速回复!我想我应该说我根本不懂javascript,所以我的问题是:1)我在哪里将你上面提供的代码插入到我现有的代码中......

1)你在问题中引用的代码是对输入它的数字进行一系列操作,包括在尝试将其四舍五入到两位数之前加半美分(以非常非最佳的方式)。如果现在的目标是忠实地再现输入的数字的四舍五入到两位数的版本(这些都不增加半美分的东西),你可以用这个替换整个函数:

function CurrencyFormatted(amount)
{
    return parseFloat(amount).toFixed(2);
}

如果你想继续加半分钱:

function CurrencyFormatted(amount)
{
    return (parseFloat(amount) + 0.005).toFixed(2);
}

。2)这是否允许我现有的所有其他数字继续按原样显示(例如,我的包含文件中的"25"显示为"25.00")?

您输入上述内容的任何数字(或数字字符串)都将使用小数点右侧的两位数字进行格式化,即使这些数字00。因此,有了上述内容,CurrencyFormatted("25")将返回"25.00".

。或者我是否使用您建议的此代码来替换我发布的部分或全部示例代码,因此,我是否需要更改所有数据库编号以适应这种情况?(即我现在应该在所有整数的末尾加两个零吗?(25 变为 2500,依此类推)

您不需要将.00添加到数据库中的整数或类似的东西中。

如果你想用PHP结帐money_format()来做这件事,这里有一个例子:

<?php 
$value = 5;
setlocale(LC_MONETARY, 'en_US');
echo '$'.money_format('%i', $value) . "'n";//$5.00

$value = 5.545;
setlocale(LC_MONETARY, 'en_US');
echo '$'.money_format('%i', $value) . "'n";//$5.54
$value = 9.99;
setlocale(LC_MONETARY, 'en_US');
echo '$'.money_format('%i', $value) . "'n";//$9.99
?>