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

时间:2012-04-26 10:07:47

标签: php javascript currency decimal

我正在处理的网站(我继承了...我不知道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;
}

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

2 个答案:

答案 0 :(得分:3)

该代码正在做一些有趣的舍入事情,我无法真正解决这个问题,但要格式化小数点右侧固定位数的数字,请在数字上使用toFixed函数:< / p>

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

请注意,它会进行舍入,所以:

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

(当你在变量上调用toFixed时,你不需要parens,但是你在文字中调用它时确实需要它们,就像我在上面两个例子中所做的那样。当然,在你的情况下,你将使用一个变量,所以不需要它们。)


重新提出您的意见/问题:

  

感谢您的快速回复!我想我应该说我不知道​​所有的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添加到数据库中的整数或类似内容中。

答案 1 :(得分:0)

如果您想通过PHP checkout 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

?>