我正在处理的网站(我继承了...我不知道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;
}
有没有办法添加或更改此代码,以便我可以显示此一个(以及将来类似)金额所需的特定分数?
答案 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
?>