0

我正在处理的一个网站(我继承了它......我不太了解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;
}

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

4

2 回答 2

3

该代码正在做一些有趣的舍入操作,我无法真正解决这些问题,但是要格式化小数点右侧具有固定位数的数字,请对数字使用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到数据库中的整数或类似的东西。

于 2012-04-26T10:12:23.210 回答
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

?>
于 2012-04-26T10:21:30.827 回答