首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP和JavaScript中格式化货币

在PHP和JavaScript中格式化货币
EN

Stack Overflow用户
提问于 2018-08-04 06:16:52
回答 4查看 614关注 0票数 0

我在客户端和服务器端都做了一些计算,我发现最终结果有所不同。

我做错了什么,什么是正确的方法来获得一个2小数浮点数来表示货币。

考虑以下代码(无格式的最终数字为1,785):

JS

代码语言:javascript
复制
var sum = parseFloat(8.50);
var tax = parseFloat(21.00);
var total = parseFloat(sum * (tax / 100));
var test = total.toFixed(2);
console.log(test);

PHP

代码语言:javascript
复制
$sum = (float)"8.50";
$tax = (float)"21.00";
$total = (float)($sum * ($tax / 100));
$test = number_format($total, 2, ".", "");
echo $test;

在JS中我得到了1.78,在PHP中我得到了1.79

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-04 06:27:31

JS

代码语言:javascript
复制
var sum = parseFloat(8.50);
var tax = parseFloat(21.00);
var total = Math.round(sum*tax) / 100;

PHP

代码语言:javascript
复制
$sum = (float)"8.50";
$tax = (float)"21.00";
$total = round($sum*$tax/100, 2);

1.785的数学上正确的四舍五入是1.79,所以上面的代码给了你想要的。

票数 1
EN

Stack Overflow用户

发布于 2018-08-04 06:28:20

Possible duplicate of

您可以使用

代码语言:javascript
复制
function RoundNum(num, length) { 
    var number = Math.round(num * Math.pow(10, length)) / Math.pow(10, length);
    return number;
}
票数 1
EN

Stack Overflow用户

发布于 2018-08-04 06:29:00

您不应该使用浮点数来存储和计算货币值-使用整数,分辨率为1/100美分(或便士或其他任何值)。一些金融应用程序更进一步-1/10000。

因此,$1在您的数据库中存储为10000。

计算完税金和总额,并对结果进行四舍五入后,就可以将其转换为美元金额进行演示。

代码语言:javascript
复制
var sum = 85000; // $8.50
var taxRate = 0.21; // 21%
var tax = sum * taxRate; // $1.785
console.log(Math.round(tax / 100) / 100); // $1.79

var cents = tax / 100; // 178.5 cents
var wholeCents = Math.round(cents); // 179 cents
var dollars = cents / 100; // $1.79
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51680689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档