Javascript自定义小数舍入方法
输入编号为Javascript自定义小数舍入方法,javascript,Javascript,输入编号为21.2791499。我需要将其四舍五入到小数点后4位,预期输出为21.2792,但以下所有方法都将21.2791作为输出。获得所需输出的最佳解决方案是什么 The number "9" after number "4" should make the number "4" as "5". Then this "5" should make "1" as "2" 无论好坏,我的客户端浏览器仅为IE6+ 小提琴: 所以说得很清楚,你不想四舍五入到最接近的整数,你想总是四舍五入吗 在这种
21.2791499
。我需要将其四舍五入到小数点后4位,预期输出为21.2792
,但以下所有方法都将21.2791
作为输出。获得所需输出的最佳解决方案是什么
The number "9" after number "4" should make the number "4" as "5". Then this "5" should make "1" as "2"
无论好坏,我的客户端浏览器仅为IE6+
小提琴:
所以说得很清楚,你不想四舍五入到最接近的整数,你想总是四舍五入吗 在这种情况下,
Math.ceil(21.2791499*10000)/10000=21.2792
将数字按所需的小数位数放大,使用内置的ceil函数,然后再将其缩小。以下是解决奇怪的舍入问题的方法 基本上我所做的就是将数字四舍五入两次 参见示例1,我在设置
var a
后对var a
进行除法,这将使用第二个math.round()
将值设置回小数点后第四位,以获得所需的效果
var inputNUmber = 21.2791499;
//Approach 1
var a = Math.round(inputNUmber * 100000) ;
a = a / 100000;
var a1 = Math.round(a * 10000) / 10000;
document.getElementById("firstText").value= a1;
替代解决方案。它仍然受到浮点数学精度的影响 基本上,它总是“四舍五入”,除非值正好有四位小数
var inputNUmber=21.2791499;
//方法1
变量a=数学四舍五入(输入编号*10000)/10000;
document.getElementById(“firstText”).value=a;
//方法2
变量b=数字(数学四舍五入(输入数字+'e4')+'e-4');
document.getElementById(“secondText”).value=b;
//方法3
var c=输入编号。最高精度(6);
document.getElementById(“thirdText”).value=c;
//这是我的方法
var d=数学楼层(输入编号*10000)/10000
d++(d
使用String.prototype.split()
,String.prototype.slice()
,Array.prototype.splice()
,Array.prototype.join(),Math.round()
var inputNumber=21.2791499;
//在`.`字符处拆分值
var n=字符串(inputNumber).split(“.”);
//“.`字符后的数字部分
var k=n[1];
//将`.`后的数字转换为数组
var res=k.切片(4).分割(“”);
//在`.`字符后面的数字的索引`.`处添加`.`
//原始输入编号的编号;e、 例如,将'2791499'转换为'2791.5'`
res.拼接(1,0,“.”);
//结果
var input=document.getElementById(“firstText”);
//对生成的数字使用'Math.round()`、'.slice()`、'.join()`
//在插入`.`字符之后
input.value=Math.round(k.slice(0,4)+“+”+Math.round(res.join(“”))代码>
所以要清楚,你不想四舍五入到最接近的整数,你想总是向上取整?嗯,你知道数字4是向下取整的吗?没有一种取整方法可以这样工作。你需要通过一个数字一个数字的逻辑来实现你自己。但除非你有非常特殊的特殊要求,否则这是一种非常奇怪的数字舍入方式。@Lijo“舍入”不是这样工作的,我建议你上一门数学课:)“输入的数字是21.2791499
。我需要在小数点后4位舍入,预期的输出是21.2792
”为什么21.2791499
会在数学上四舍五入到21.2792
?考虑到浮点数学如此挑剔,这不是很危险吗?例如,Math.ceil(21.27910000000*10000)/10000会导致21.2792
,但是Math.ceil(21.279100000001*10000)/10000会导致我的chrome版本出现21.2791
。当添加足够的小数位数时,任何浮点数学都会中断。是的,但你能做什么……但这不是四舍五入,只是将最后一个整数设为一,“OP”不理解“四舍五入”的含义,所以这个答案可能仍然是正确的。@JamesGaunt我想你是对的。我想这更多的是OP的前提问题。是的,这个答案并没有回答被问到的问题,但它可能回答了OP应该问的问题。
var inputNUmber = 21.2791499;
//Approach 1
var a = Math.round(inputNUmber * 100000) ;
a = a / 100000;
var a1 = Math.round(a * 10000) / 10000;
document.getElementById("firstText").value= a1;