我想最多舍入2位小数,但只在必要时.
输入:
10
1.7777777
9.1
Run Code Online (Sandbox Code Playgroud)
输出:
10
1.78
9.1
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做__CODE__?
你可以将javascript中的数字舍入到小数点后的1个字符(正确舍入)吗?
我尝试了*10,round,/ 10但它在int的末尾留下了两位小数.
我需要一轮例如6.688689到6.7,但它总是显示我7.
我的方法:
Math.round(6.688689);
//or
Math.round(6.688689, 1);
//or
Math.round(6.688689, 2);
Run Code Online (Sandbox Code Playgroud)
但结果总是一样的7...我做错了什么?
我正在使用javascript绑定到一些复选框,而toFixed(2)不是四舍五入.任何想法为什么它不四舍五入?例如,如果数字是859.385仅显示859.38而不是859.39.
我还读过,toFixed根据您使用的浏览器,可以进行不同的循环,任何人都知道如何解决这个问题,以便我的javascript计算与我的php计算相匹配?
var standardprice = parseFloat($('#hsprice_'+this.id.split('_')[1]).val());
var price = parseFloat($('#hprice_'+this.id.split('_')[1]).val());
var discount = parseFloat($('#hdiscount_'+this.id.split('_')[1]).val());
var deposit = parseFloat($('#hdeposit_'+this.id.split('_')[1]).val());
var currSprice = parseFloat($('#hTotalSprice').val());
var currPrice = parseFloat($('#hTotalPrice').val());
var currDiscount = parseFloat($('#hTotalDiscount').val());
var currDeposit = parseFloat($('#hTotalDeposit').val());
currSprice += standardprice;
currPrice += price;
currDiscount += discount;
currDeposit += deposit;
$('#lblTotalSprice').text('$'+addCommas(currSprice.toFixed(2)));
$('#lblTotalPrice').text('$'+addCommas(currPrice.toFixed(2)));
$('#lblTotalDiscount').text('$'+addCommas(currDiscount.toFixed(2)));
$('#lblTotalDeposit').text('$'+addCommas(currDeposit.toFixed(2)));
$('#hTotalSprice').val(currSprice.toFixed(2));
$('#hTotalPrice').val(currPrice.toFixed(2));
$('#hTotalDiscount').val(currDiscount.toFixed(2));
$('#hTotalDeposit').val(currDeposit.toFixed(2));
Run Code Online (Sandbox Code Playgroud) 在JavaScript中有几种不同的方法可以将浮点数转换为整数.我的问题是什么方法能提供最佳性能,最兼容,或被认为是最佳实践?
以下是我所知道的一些方法:
var a = 2.5;
window.parseInt(a); // 2
Math.floor(a); // 2
a | 0; // 2
Run Code Online (Sandbox Code Playgroud)
我相信那里还有其他人.建议?
考虑以下:
var x = 2.175;
console.log(x.toFixed(2)); // 2.17
Run Code Online (Sandbox Code Playgroud)
什么?不,这并不奇怪.这是相当明显的,请参阅:数字文字2.175实际上存储在内存中(通过IEEE-754规则)作为一个稍微小于2.175的值.这很容易证明:
console.log(x.toFixed(20)); // 2.17499999999999982236
Run Code Online (Sandbox Code Playgroud)
这就是它在32位Windows设置的最新版Firefox,Chrome和Opera中的工作原理.但那不是问题.
真正的问题是Internet Explorer 6(!)实际上是如何设法完成的对 像人类一样:
var x = 2.175;
console.log(x.toFixed(2)); // 2.18
console.log(x.toFixed(20)); // 2.17500000000000000000
Run Code Online (Sandbox Code Playgroud)
好吧,我过度使用了:实际上我测试过的所有Internet Explorer(IE8-11,甚至是MS Edge!)的行为方式都是一样的.还是,WAT?
更新:它变得陌生:
x=1.0;while((x-=0.1) > 0) console.log(x.toFixed(20));
IE Chrome
0.90000000000000000000 0.90000000000000002220
0.80000000000000000000 0.80000000000000004441
0.70000000000000010000 0.70000000000000006661
0.60000000000000010000 0.60000000000000008882
0.50000000000000010000 0.50000000000000011102
0.40000000000000013000 0.40000000000000013323
0.30000000000000015000 0.30000000000000015543
0.20000000000000015000 0.20000000000000014988
0.10000000000000014000 0.10000000000000014433
0.00000000000000013878 0.00000000000000013878
Run Code Online (Sandbox Code Playgroud)
为什么差异 - 除了最后一个?为什么最后一个没有区别?x=0.1; while(x-=0.01)...顺便说一下,它非常相似:直到我们非常接近零,toFixed在IE中显然试图削减一些角落.
免责声明:我不知道,浮点数学是有点缺陷.我不明白的是IE和浏览器世界其他部分之间的区别.
浏览器之间存在大量DOM/CSS不一致.但浏览器之间存在多少核心JS差异?最近让我失望的是,在Firefox中,setTimeout回调函数会传递一个额外的参数(https://developer.mozilla.org/en/window.setTimeout).
此外,现在浏览器正在实现新的功能(例如,Array.map),如果你试图编写必须适用于所有浏览器的代码(甚至回到IE6),那么知道你能够/不能使用它会让人感到困惑.
是否有一个网站干净地组织这些类型的差异?
javascript的"Number.toFixed"的默认实现似乎有点破碎.
console.log((8.555).toFixed(2)); // returns 8.56
console.log((8.565).toFixed(2)); // returns 8.57
console.log((8.575).toFixed(2)); // returns 8.57
console.log((8.585).toFixed(2)); // returns 8.59
Run Code Online (Sandbox Code Playgroud)
我需要一种比这更一致的舍入方法.
在8.500和8.660之间的范围内,以下数字不能正确舍入.
8.575
8.635
8.645
8.655
Run Code Online (Sandbox Code Playgroud)
我已经尝试按如下方式修复原型实现,但它只有一半.任何人都可以建议任何可以使其更一致地工作的变化吗?
Number.prototype.toFixed = function(decimalPlaces) {
var factor = Math.pow(10, decimalPlaces || 0);
var v = (Math.round(this * factor) / factor).toString();
if (v.indexOf('.') >= 0) {
return v + factor.toString().substr(v.length - v.indexOf('.'));
}
return v + '.' + factor.toString().substr(1);
};
Run Code Online (Sandbox Code Playgroud) 我只是想整理一下1.275.toFixed(2),我期待的回报是1.28而不是1.27.
使用各种计算器和舍入到最接近的百分之一的简单方法,如果最后一个数字大于或等于五,它应该向上舍入.
如果这不能与toFixed(2)一起使用,那怎么办?
人们询问console.log(1.275.toFixed(2))是否打印掉1.28,这是一个快速截图MacOS Chrome版本55.0.2883.95(64位)
可能重复:
你如何在Javascript中舍入到1位小数?
以下代码显示在谷歌地图上显示的特定路线上的总覆盖距离.我设法将数字从公里转换为英里.这是函数的代码:
function computeTotalDistance(result) {
var total = 0;
var myroute = result.routes[0];
for (i = 0; i < myroute.legs.length; i++) {
total += myroute.legs[i].distance.value;
}
total = total *0.621371/ 1000.
document.getElementById('total').innerHTML = total + ' mi';
Run Code Online (Sandbox Code Playgroud)
总计显示为41.76483039399999 mi.如何将total小数点四舍五入?
我正在使用toFixed但该方法无法按预期运行
parseFloat(19373.315).toFixed(2);
//19373.31 Chrome
Run Code Online (Sandbox Code Playgroud)
预期产出:19373.32
parseFloat(9373.315).toFixed(2);
// 9373.32 Working fine
Run Code Online (Sandbox Code Playgroud)
为什么第一个例子向下舍入,而第二个例子向上舍入?
我有一个下拉列表,其值为2位小数.
<label for="delivery">Delivery:</label>
<select id="delivery" name="delivery">
<option value="1.50">Fast</option>
<option value="2.50">Medium</option>
<option value="3.50">Slow</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我如何在Javascript中调用它,我知道我必须在下面的某行使用toFixed(2),但我不确定在哪里放它.
var delivery = parseInt($('#delivery').val());
Run Code Online (Sandbox Code Playgroud)
另外,我会将它放在输出或计算中的div中,还是两者兼而有之?
约拿