我需要将浮点数中的小数位数截断为特定数字并丢弃其余部分,目前我发现的唯一方法是toFixed
,但这会将值四舍五入而不是截断:
let num = 21.777777;
console.log(num.toFixed(1));
console.log(num.toFixed(2));
console.log(num.toFixed(3));
console.log(num.toFixed(4));
它发生在其他人身上,您是如何解决的,我正在考虑转换为字符串并修剪字符串,但我想知道是否有办法在不求助于它的情况下做到这一点。
版
如前所述,原始答案的代码在进行浮点运算时存在错误,即小数丢失。我们可以通过查看数字的小数位数是否小于或等于必须截断的位数来解决它。
或者按照这个想法简化它:
我还做了一些测试,你可以在这里看到。
它来自英文网站,但您可能想看看这个问题的答案。这个很有趣。
原始答案
有一点数学:
没有预定义的函数可以做到这一点,这也不是微不足道的,因为用浮点数进行数学运算总是会出现可能的舍入错误,所以最好谨慎行事:将数字转换为字符串,然后保留所需的小数:
解释:正则表达式一直使用数字,直到找到一个点。然后它会保留它找到的接下来的两个数字(或者更少,如果没有的话)。
请注意,该函数返回的是文本,而不是数字。可以使用函数将其转换回数字
Number(texto)
此功能简短、清晰、简洁,并涵盖(希望)所有(3 种不同的)情况。对于特定情况,可以通过简单地消除不会使用的内容来简化它。
计算是在所有三种情况下执行的,相同语句的小变化。案例:
为了寻求最大的简洁和优雅,我更喜欢这个新版本:
x = 数字(x);decimalDigits = Number(decimalDigits);
一个。x = x * (10 ** 十进制数字); // 将小数点向右移动与 decimalDigits 一样多的位;
湾。x = x - (x % 1); 我们计算新数字的小数部分 (x % 1) 并减去它。
C。x = x / (10 ** decimalDigits); 我们将小数点移动到初始位置。
(这是我留下的以前的版本,以防有人喜欢它:
这里 parseInt 是负责消除小数部分的)
返回x;
返回 x.toString();
d。toString() 为我们提供了相同数字的文本表示。
返回文本字符串,包括非有效零。与 2 相同,但将 .toString() 的最后一步更改为: .toFixed(decimalDigits)
返回 x.toFixed(decimalDigits)
d。toFixed(decimaDigits) 在必要时返回一个包含非有效零的文本字符串,以便它具有由 decimaDigits 指示的精确小数字符数。
toFixed(decimalDigits),如果有任何剩余的小数,它也会消除它们 - 舍入而不是截断 - 但在这种情况下,从前面的步骤中我们知道没有剩余:我们已经在步骤 b 中截断了它们。(参见准备。第 * 0 段。),最多缺少非有效零。
你也可以使用 toPesition() 函数,这个函数的作用是定义你想要显示的数字的数量,包括小数,除此之外,它还将数字逼近一个更接近的数量。例子:
我有一个可以帮助你的例子,它显示了没有四舍五入的结果,它只显示了结果和前两位小数:
我找到了一种使用 javascript 的方法。
输入格式如下:00000,00
我记录了它以防有人需要进行调整,他们会更容易找到在哪里进行调整。