Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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中包含其值的最低有效位_Javascript_Floating Point_Numbers - Fatal编程技术网

获取JavaScript中包含其值的最低有效位

获取JavaScript中包含其值的最低有效位,javascript,floating-point,numbers,Javascript,Floating Point,Numbers,我想从JavaScript中的数字中提取包含其值的最低有效位(这样就不会丢失任何信息) 比如说 12.0123323->0.0000003 123299000->9000 123001->1 123001.01->0.01 10000000->10000000 等等 有没有一个简洁的方法可以做到这一点 编辑: 正如人们注意到的,由于Javascript:s处理数字的方式,它不能表示12.0123323,所以让我们假设在这些情况下它是一个字符串 const least = num => [

我想从JavaScript中的数字中提取包含其值的最低有效位(这样就不会丢失任何信息)

比如说

12.0123323
->
0.0000003

123299000
->
9000

123001
->
1

123001.01
->
0.01

10000000
->
10000000

等等

有没有一个简洁的方法可以做到这一点

编辑: 正如人们注意到的,由于Javascript:s处理数字的方式,它不能表示12.0123323,所以让我们假设在这些情况下它是一个字符串

 const least = num => [...num.toString()].reduceRight((res, d, i) => (+res ? (d === "." ? "." : "0") : d) + res, "");

它基本上从右到左遍历数字的字符串表示形式(
toString
)(
reduceRight
),如果当前结果中已经有一个数字(
+res
),则

它要么接收点,要么将任何其他数字转换为0。如果还没有数字(
),它只需添加当前的
d
,并附加已经遍历的部分
+res


如果您更喜欢可读代码:

 function least(num){
  var res = "";
  for(var char of num.toString().split("").reverse()){
    if(+res){
      res = (char === "." ? "." : "0") + res;
    } else {
      res = char + res;
    }
  }
  return res;
}

您可以检查该值是否为整数,并选择不同的替换模式以获得正确的最低有效值

函数最小值(x){
返回x==数学楼层(x)
?+x.toString().替换(/.*(=[1-9]0*$)/,“”)
:+x.toString().replace(/\d(?=.[1-9]$)/g,'0');
}
变量数组=[
12.0123323, // 0.0000003
123299000,  // 9000
123001,     // 1
123001.01,  // 0.01
10000000    // 10000000
];
log(array.map(最少))

。作为控制台包装{max height:100%!important;top:0;}
您需要定义“最低有效位”的含义,因为例如
12.0123323
没有准确表示。也许你可以通过一些合理的取整规则来做到这一点。我会测试default
toString
是否能完成这项工作,它可能会。您尝试了什么?这是家庭作业吗?@Cheersandhth.-Alf我明白了,嗯,但当我在控制台中打印它时,它仍然显示正确的小数数。@user1506145:Alf的意思是JavaScript中的浮点值不能正好是12.0123323。这是因为JavaScript使用二进制浮点。JavaScript中最接近的浮点值可能是12.0123323000000006288701154089119230106353759765625。但是JavaScript在默认情况下可能会显示“12.0123323”。(我不记得JavaScript默认设置输出数字的格式。)因此,您认为的12.0123323不是12.0123323,真实值的最低有效位是5。@user1506145:这意味着您必须澄清您的问题。如果您有一个数字(代表一个数字的字符串)而不是一个浮点数,您可以检查该字符串以查看最低有效位是什么。如果您有一个浮点数,那么它要么是一个整数,要么它的最低有效位是5。(转换为十进制时,所有二进制分数以5结尾。)如果您知道浮点数实际上来自位数有限的十进制数字,则可以找到原始值的最低有效位。
 function least(num){
  var res = "";
  for(var char of num.toString().split("").reverse()){
    if(+res){
      res = (char === "." ? "." : "0") + res;
    } else {
      res = char + res;
    }
  }
  return res;
}
var foundNonzero = false
Number("324.034"
.split('')
.reverse()
.map((i)=>{
    if(i==='.') return i
    if(foundNonzero) return '0'
    if(i!=='0'){
        foundNonzero = true 
    }
    return i
}).reverse().join(''))