使用javascript四舍五入小数

发布于 2024-10-29 02:03:22 字数 183 浏览 4 评论 0原文

我需要使用 javascript 将小数值四舍五入到小数位。

例如:

16.181 to 16.18
16.184 to 16.18
16.185 to 16.19
16.187 to 16.19

我找到了一些答案,但大多数都没有将 16.185 舍入到 16.19。

I need to round off the decimal value to decimal places using javascript.

Ex,:

16.181 to 16.18
16.184 to 16.18
16.185 to 16.19
16.187 to 16.19

I have found some answers, but most of them do not round off 16.185 to 16.19..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

嘿嘿嘿 2024-11-05 02:03:22
(Math.round((16.185*Math.pow(10,2)).toFixed(1))/Math.pow(10,2)).toFixed(2);

如果你的值是,例如 16.199,正常回合将返回 16.2...但使用此方法,你也会得到最后 0,所以你会看到 16.20!但请记住,该值将以字符串形式返回。如果你想将它用于进一步的操作,你必须解析它:)

现在作为函数:

function trueRound(value, digits){
    return (Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits);
}
(Math.round((16.185*Math.pow(10,2)).toFixed(1))/Math.pow(10,2)).toFixed(2);

If your value is, for example 16.199 normal round will return 16.2... but with this method youll get last 0 too, so you see 16.20! But keep in mind that the value will returned as string. If you want to use it for further operations, you have to parsefloat it :)

And now as function:

function trueRound(value, digits){
    return (Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits);
}
飞烟轻若梦 2024-11-05 02:03:22

感谢@ayk的回答,我将你的函数修改为:

function trueRound(value, digits){
    return ((Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits)) * 1;
}

只需添加“ *1
因为对于你的,正如你所写,16.2 变成 16.20
我不需要后面的零。

Thanks @ayk for your answer, I modified your function into this :

function trueRound(value, digits){
    return ((Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits)) * 1;
}

just add " *1 "
because with yours, as you wrote, 16.2 becomes 16.20
and I don't need the zero in the back.

因为看清所以看轻 2024-11-05 02:03:22

使用

Decimal ds=new Decimal(##.##);
String value=ds.format(inputnumber);

-这在我的情况下可以完美工作,希望它能 100% 工作

Use-

Decimal ds=new Decimal(##.##);
String value=ds.format(inputnumber);

This will work perfectly in my case ,hope it will work 100%

聚集的泪 2024-11-05 02:03:22

您可以尝试一个更简单的功能...

function roundOffTo(number, place) {
    return Math.round(number * place) / place;
}

它是如何工作的?
该位置可以是 10、100、1000、10000 等。反之则为 0.1、0.01、0.001,以此类推。假设您的数字是 16.185,您的位置是 100。它要做的第一件事就是将数字乘以位置,即 1618.5。用 Math.round 四舍五入得到 1619。除以位数得到 16.19。那里。
顺便说一句,今天不用担心 0.5 的问题,它已经解决了。但以防万一,请将 Math.round(number * place) 更改为 Math.round(number * place + 0.1)。

You COULD try a simpler function...

function roundOffTo(number, place) {
    return Math.round(number * place) / place;
}

How does it work?
The place can be 10, 100, 1000, 10000, and so on. The reverse will be 0.1, 0.01, 0.001, and so on. Let's say your number is 16.185, and your place is 100. The first thing it'll do is to multiply the number by the place, which is 1618.5. Rounding it off by Math.round will result in 1619. Dividing by the place gives us 16.19. There.
By the way, no need to worry about the .5 problem today, it's kinda fixed. But just in case it isn't, change Math.round(number * place) to Math.round(number * place + 0.1).

装纯掩盖桑 2024-11-05 02:03:22

您正在使用的代码是正确的。但是要获得所需的结果,请从代码中删除.tofixed(numofdec)。

函数:

函数格式名称(mynum,numofdec){

    var decimal = 1
    for (i = 1; i <= numOfDec; i++)
        decimal = decimal * 10 //The value of decimal determines the number of decimals to be rounded off with (.5) up rule 
    var myFormattedNum = Math.round(myNum * decimal) / decimal
    return (myFormattedNum)
}

希望它以某种方式帮助您:)

The code you are using for rounding off is correct. But to get the desired result please remove the .toFixed(numOfDec) from the code.

The function:

function formatNumber(myNum, numOfDec) {

    var decimal = 1
    for (i = 1; i <= numOfDec; i++)
        decimal = decimal * 10 //The value of decimal determines the number of decimals to be rounded off with (.5) up rule 
    var myFormattedNum = Math.round(myNum * decimal) / decimal
    return (myFormattedNum)
}

Hope it helps you in some way :)

好久不见√ 2024-11-05 02:03:22
function formatNumber(myNum, numOfDec) {
        var dec = Math.pow(10, numOfDec);
        return Math.round(myNum * dec + 0.1) / dec;
}
function formatNumber(myNum, numOfDec) {
        var dec = Math.pow(10, numOfDec);
        return Math.round(myNum * dec + 0.1) / dec;
}
So尛奶瓶 2024-11-05 02:03:22
parseFloat(myNum.toFixed(numOfDec))
parseFloat(myNum.toFixed(numOfDec))
何以心动 2024-11-05 02:03:22

[编辑]
此代码不适用于 18.185 这样的值,因为 18.185 * Math.pow(10,2) 正在计算为 1818.4999999999997

Math.round(<value> * Math.pow(10,<no_of_decimal_places>)) / Math.pow(10,<no_of_decimal_places>) ;

示例:
1234.5678 --> 2 位小数 --> 1234.57

Math.round(1234.5678 * Math.pow(10,2)) / Math.pow(10,2) ; 

[EDIT]
This code does not work for a value like 18.185, as 18.185 * Math.pow(10,2) is being evaluated to 1818.4999999999997

Math.round(<value> * Math.pow(10,<no_of_decimal_places>)) / Math.pow(10,<no_of_decimal_places>) ;

Example:
1234.5678 --> 2 decimal places --> 1234.57

Math.round(1234.5678 * Math.pow(10,2)) / Math.pow(10,2) ; 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文