首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将数字截断到两位小数,不进行舍入

将数字截断到两位小数,不进行舍入
EN

Stack Overflow用户
提问于 2010-11-16 01:31:18
回答 30查看 317.8K关注 0票数 249

假设我有一个值15.7784514,我想显示它15.77时不进行舍入。

代码语言:javascript
复制
var num = parseFloat(15.7784514);
document.write(num.toFixed(1)+"<br />");
document.write(num.toFixed(2)+"<br />");
document.write(num.toFixed(3)+"<br />");
document.write(num.toFixed(10));

结果是-

代码语言:javascript
复制
15.8
15.78
15.778
15.7784514000 

如何显示15.77?

EN

回答 30

Stack Overflow用户

回答已采纳

发布于 2010-11-16 01:33:29

将数字转换为字符串,将数字匹配到小数点后第二位:

代码语言:javascript
复制
function calc(theform) {
    var num = theform.original.value, rounded = theform.rounded
    var with2Decimals = num.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0]
    rounded.value = with2Decimals
}
代码语言:javascript
复制
<form onsubmit="return calc(this)">
Original number: <input name="original" type="text" onkeyup="calc(form)" onchange="calc(form)" />
<br />"Rounded" number: <input name="rounded" type="text" placeholder="readonly" readonly>
</form>

toString不同,toFixed方法在某些情况下会失败,因此要非常小心地使用它。

票数 259
EN

Stack Overflow用户

发布于 2012-10-10 09:34:28

我选择这样写,而不是手动删除字符串的余数,这样我就不必处理数字带来的数学问题:

代码语言:javascript
复制
num = num.toString(); //If it's not already a String
num = num.slice(0, (num.indexOf("."))+3); //With 3 exposing the hundredths place
Number(num); //If you need it back as a Number

这将给你"15.77“,num = 15.7784514;

票数 40
EN

Stack Overflow用户

发布于 2018-01-05 00:54:26

另一个单行解决方案:

代码语言:javascript
复制
number = Math.trunc(number*100)/100

我使用100,因为您希望截断到第二位,但更灵活的解决方案是:

代码语言:javascript
复制
number = Math.trunc(number*Math.pow(10, digits))/Math.pow(10, digits)

其中digits是要保留的十进制位数。

有关详细信息和浏览器兼容性,请参阅Math.trunc specs

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4187146

复制
相关文章

相似问题

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