Math.abs()限制动量

时间:2015-09-14 21:32:01

标签: javascript math decimal max

我已经浏览过互联网,但我找不到真正适用于我的解决方案。

var tv = Length * Type;

if (tv < 0) 
    {
    cForm.voltage.value = "-" + Math.abs(tv) + " V";
    }
else...

出于某种原因,这两个数字的一​​些计算结果大约是十五分之一。我想限制返回的小数,并且不允许数字向上或向下舍入。在一个计算器上,它只出现在大约第三个小数位,但Math.abs()使它太过分了。

.toFixed()对我不起作用,因为如果数字只有2位小数,它会在末尾添加额外的零。如果计算,我只想显示第四个。

3 个答案:

答案 0 :(得分:2)

只需扩展@ goto-0的评论,并使用正确的小数位数。

var tv = Length * Type;

if (tv < 0) 
    {
        cForm.voltage.value = "-" + (Math.round(Math.abs(tv) * 10000) / 10000) + " V";
    }
else...

答案 1 :(得分:1)

这里的实现是一个截断额外小数位的函数。如果要对输出进行舍入,可以使用Number.toPrecision()

&#13;
&#13;
function toFixedDecimals(num, maxDecimals) {
  var multiplier = Math.pow(10, maxDecimals);
  return Math.floor(num * multiplier) / multiplier
}

console.log(toFixedDecimals(0.123456789, 4));
console.log(toFixedDecimals(100, 4));
console.log(toFixedDecimals(100.12, 4));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我确定它不是最有效的方法,但却非常无脑 -

  1. 抓住你的结果
  2. 将其拆分为基于小数点的数组
  3. 然后将小数部分修剪为两位数(或者您想要多少)。
  4. 将这些碎片连在一起
  5. 很抱歉长变量名称 - 只是想明确发生了什么:)

        // your starting number - can be whatever you'd like
        var number = 145.3928523;
        // convert number to string
        var number_in_string_form = String(number);
        // split the number in an array based on the decimal point
        var result = number_in_string_form.split(".");
        // this is just to show you what values you end up where in the array
        var digit = result[0];
        var decimal = result[1];
        // trim the decimal lenght to whatever you would like
        // starting at the index 0 , take the next 2 characters
        decimal = decimal.substr(0, 2);
        // concat the digit with the decimal - dont forget the decimal point!
        var finished_value = Number(digit + "." + decimal); 
    

    在这种情况下,finished_value将= 145.39