javascript使用问题';s toFixed()函数
我正在寻找一个JavaScript函数,将一个数字四舍五入到指定的小数位数&我找到了以下页面: 该页面包括一个使用原型的部分&toFixed()函数。。。。。然而,我也发现了这个页面:(见最后一个例子)&它直接使用toFixed函数&似乎做了同样的事情 我不是一个喜欢javascript的人,所以如果这是一个愚蠢的问题,我很抱歉,但是他们之间有什么区别呢 这是为了清楚起见 原型:javascript使用问题';s toFixed()函数,javascript,floating-point,prototype,rounding,Javascript,Floating Point,Prototype,Rounding,我正在寻找一个JavaScript函数,将一个数字四舍五入到指定的小数位数&我找到了以下页面: 该页面包括一个使用原型的部分&toFixed()函数。。。。。然而,我也发现了这个页面:(见最后一个例子)&它直接使用toFixed函数&似乎做了同样的事情 我不是一个喜欢javascript的人,所以如果这是一个愚蠢的问题,我很抱歉,但是他们之间有什么区别呢 这是为了清楚起见 原型: if (!Number.toFixed) { Number.prototype.toFixed=function
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-函数总是这样)
这不一定是坏事,因为这就是你想要的最终结果?!如果还没有本机*实现,代码似乎正在定义一个版本iftoFixed
。当存在本机*支持时,将触发警报
*(好吧,要么是浏览器自带的,要么已经通过JS库添加到原型中。不管怎样,它已经存在了,因此不需要更多的工作。)我不确定为什么在else块中有
警报('bad')
;在“bad”情况下,真正发生的事情是number
变量已经定义了一个名为toFixed
的成员(强制为布尔值时计算结果为true-函数总是这样)
这不一定是坏事,因为这就是你想要的最终结果?!如果还没有本机*实现,代码似乎正在定义一个版本iftoFixed
。当存在本机*支持时,将触发警报
*(好吧,要么是浏览器自带的,要么已经通过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