Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript使用问题';s toFixed()函数_Javascript_Floating Point_Prototype_Rounding - Fatal编程技术网

javascript使用问题';s toFixed()函数

javascript使用问题';s toFixed()函数,javascript,floating-point,prototype,rounding,Javascript,Floating Point,Prototype,Rounding,我正在寻找一个JavaScript函数,将一个数字四舍五入到指定的小数位数&我找到了以下页面: 该页面包括一个使用原型的部分&toFixed()函数。。。。。然而,我也发现了这个页面:(见最后一个例子)&它直接使用toFixed函数&似乎做了同样的事情 我不是一个喜欢javascript的人,所以如果这是一个愚蠢的问题,我很抱歉,但是他们之间有什么区别呢 这是为了清楚起见 原型: if (!Number.toFixed) { Number.prototype.toFixed=function

我正在寻找一个JavaScript函数,将一个数字四舍五入到指定的小数位数&我找到了以下页面:

该页面包括一个使用原型的部分&toFixed()函数。。。。。然而,我也发现了这个页面:(见最后一个例子)&它直接使用toFixed函数&似乎做了同样的事情

我不是一个喜欢javascript的人,所以如果这是一个愚蠢的问题,我很抱歉,但是他们之间有什么区别呢

这是为了清楚起见

原型:

if (!Number.toFixed) {
  Number.prototype.toFixed=function(n){
    return Math.round(this*Math.pow(10, n)) / Math.pow(10, n);
  }
}

// example:
floating_number = 123.45687;
decimal_points = 2;
window.alert(floating_number.toFixed(decimal_points));
标准:

var numex = 3.1415926535;
alert( numex.toFixed(5) );
我还用这个函数尝试了第一批代码

function round_float(number,places){
    if (!number.toFixed) {
        number.prototype.toFixed=function(places){
            return Math.round(this*Math.pow(10, places)) / Math.pow(10, places);
        }
    } else {
        alert('bad');
    }
}

它进入了“坏”警报区。。。。。我猜这是由toFixed的错误反应造成的;你知道为什么这个函数是这样写的吗?

很简单。并非所有浏览器都有固定的
toFixed
,因此在第一个示例中,它提供了一个安全网。另一种选择意味着浏览器确实有一个固定的
toFixed
,它不是“坏的”,而是“正常的”。

简单。并非所有浏览器都有固定的
toFixed
,因此在第一个示例中,它提供了一个安全网。另一种方法是,浏览器确实有一个
toFixed
,它不是“坏的”,而是“正常的”。

我不知道为什么在else块中有
警报('bad')
;在“bad”情况下,真正发生的事情是
number
变量已经定义了一个名为
toFixed
的成员(强制为布尔值时计算结果为true-函数总是这样)

这不一定是坏事,因为这就是你想要的最终结果?!如果还没有本机*实现,代码似乎正在定义一个版本if
toFixed
。当存在本机*支持时,将触发警报


*(好吧,要么是浏览器自带的,要么已经通过JS库添加到原型中。不管怎样,它已经存在了,因此不需要更多的工作。)

我不确定为什么在else块中有
警报('bad')
;在“bad”情况下,真正发生的事情是
number
变量已经定义了一个名为
toFixed
的成员(强制为布尔值时计算结果为true-函数总是这样)

这不一定是坏事,因为这就是你想要的最终结果?!如果还没有本机*实现,代码似乎正在定义一个版本if
toFixed
。当存在本机*支持时,将触发警报


*(好吧,要么是浏览器自带的,要么已经通过JS库添加到原型中。不管怎样,它已经存在了,因此不需要更多的工作。)

我会尝试以下方法:

if (!Number.toFixed){
    Number.prototype.toFixed = function(n){
        return Math.round(this * Math.pow(10, n)) / Math.pow(10, n);
    }
}

var num = 123.4567;
$('body').append(num.toFixed(3));
function customtoFixed(num){
  if(num % 1 != 0){
   var split_nums = (''+num).match(/(\d+)(\.\d+)?/);
   console.log(split_nums);
      if(split_nums[2]>.995){
             return (+split_nums[1]) + (+0.99);
      } else {
      return num.toFixed(2); 
      }
   } else {
    return num.toFixed(2); 
   }
}

在需要之前执行“存在性检查”,而不是在函数中。()

我想试试这样的东西:

if (!Number.toFixed){
    Number.prototype.toFixed = function(n){
        return Math.round(this * Math.pow(10, n)) / Math.pow(10, n);
    }
}

var num = 123.4567;
$('body').append(num.toFixed(3));
function customtoFixed(num){
  if(num % 1 != 0){
   var split_nums = (''+num).match(/(\d+)(\.\d+)?/);
   console.log(split_nums);
      if(split_nums[2]>.995){
             return (+split_nums[1]) + (+0.99);
      } else {
      return num.toFixed(2); 
      }
   } else {
    return num.toFixed(2); 
   }
}

在需要之前执行“存在性检查”,而不是在函数中。()

我将函数用于javascript toFixed()函数。 在我的项目中,QA对单价进行了测试 例如,它将是79.9989,所以如果我使用固定(2),结果是80.00。 在我的QA中,他们不想固定在80.00,他们想要79.99

有些情况: 固定前后(2) 78.896 78.89 78.996 78.99

所以我用我的函数如下:

if (!Number.toFixed){
    Number.prototype.toFixed = function(n){
        return Math.round(this * Math.pow(10, n)) / Math.pow(10, n);
    }
}

var num = 123.4567;
$('body').append(num.toFixed(3));
function customtoFixed(num){
  if(num % 1 != 0){
   var split_nums = (''+num).match(/(\d+)(\.\d+)?/);
   console.log(split_nums);
      if(split_nums[2]>.995){
             return (+split_nums[1]) + (+0.99);
      } else {
      return num.toFixed(2); 
      }
   } else {
    return num.toFixed(2); 
   }
}

我将函数用于javascript toFixed()函数。 在我的项目中,QA对单价进行了测试 例如,它将是79.9989,所以如果我使用固定(2),结果是80.00。 在我的QA中,他们不想固定在80.00,他们想要79.99

有些情况: 固定前后(2) 78.896 78.89 78.996 78.99

所以我用我的函数如下:

if (!Number.toFixed){
    Number.prototype.toFixed = function(n){
        return Math.round(this * Math.pow(10, n)) / Math.pow(10, n);
    }
}

var num = 123.4567;
$('body').append(num.toFixed(3));
function customtoFixed(num){
  if(num % 1 != 0){
   var split_nums = (''+num).match(/(\d+)(\.\d+)?/);
   console.log(split_nums);
      if(split_nums[2]>.995){
             return (+split_nums[1]) + (+0.99);
      } else {
      return num.toFixed(2); 
      }
   } else {
    return num.toFixed(2); 
   }
}

先尝试做
number=新号码(number)
,然后再试。强制它强制转换允许
if(number.toFixed)
工作(至少对我来说是这样)。(另外,数据类型是“Number”而不是“Number”(javascript区分大小写)。另一方面,
toFixed()
返回一个
String
,而自定义实现返回一个
Number
。好吧,读一下这个答案:根据这个
toFixed
有它的问题,所以它是“硬编码的”是确保它执行您希望它执行的操作的最安全的方法。@Brad:它们是int,因为数字是通过parseInt()或parseFloat()输入的,然后在传递给此函数之前对它们进行了算术运算。……我甚至只输入了一个数字和相同的结果来测试它。尝试执行
number=newnumber(number)
首先,然后再试一次。强制将其强制转换可以让
if(number.toFixed)
工作(至少对我来说是这样)。(而且,数据类型是“number”而不是“number”(javascript是区分大小写的)。另一方面,
toFixed()
返回一个
字符串
,而自定义实现返回一个
数字
。好吧,阅读下面的答案:根据这个
的说法,toFixed
有它的问题,所以让它“硬编码”是确保它做你想做的事情的最安全的方法。@Brad:它们是int,因为数字是通过parseInt()输入的或parseFloat()&然后在传递给此函数之前对它们进行了算术运算…..我甚至通过输入一个数字和相同的结果对其进行了测试。啊,是的,我现在看到了它。“坏”只是为了测试,因为我没有得到任何返回的结果。是否应该使用本机函数来代替我现在的警报?否则,如果没有这里是对tofixed()的本机支持,然后该函数将不返回任何内容,不!?@Brett-我们正在讨论的
round\u float
函数可能命名错误。它实际上不执行舍入计算;相反,它确保给定对象(
数字
变量)定义了一个名为
toFixed
的方法,如果事先不存在该方法,则会创建一个函数来执行此操作。如果调用类似
ensuretofixedffunctiondefined
的方法,则会更清晰。(此外,
参数放置到met