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;