我想从JavaScript中的数字中提取包含其值的最低有效数字(以便不丢失任何信息)
例如
12.0123323
- > 0.0000003
123299000
- > 9000
123001
- > 1
123001.01
- > 0.01
10000000
- > 10000000
等...
有没有一种巧妙的方法可以做到这一点?
编辑: 正如人们已经注意到因为Javascript:s处理数字的方式它不能代表12.0123323,所以让我们假设它是那些极端情况下的字符串。
答案 0 :(得分:0)
const least = num => [...num.toString()].reduceRight((res, d, i) => (+res ? (d === "." ? "." : "0") : d) + res, "");
它基本上遍历从右到左(toString
)的数字的字符串表示(reduceRight
),如果当前结果中已有数字(+res
)则< / p>
d === "." ? "." : "0"
它接管点或将任何其他数字转换为0.如果还没有数字(:
),它只是添加当前的一个d
,并附加已经遍历的部分{ {1}}
如果您更喜欢可读代码:
+ res
答案 1 :(得分:0)
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(''))
答案 2 :(得分:0)
您可以检查该值是否为整数,并选择其他替换架构以获取正确的最低有效值。
function least(x) {
return x === Math.floor(x)
? +x.toString().replace(/.*(?=[1-9]0*$)/, '')
: +x.toString().replace(/\d(?=.*[1-9]$)/g, '0');
}
var array = [
12.0123323, // 0.0000003
123299000, // 9000
123001, // 1
123001.01, // 0.01
10000000 // 10000000
];
console.log(array.map(least));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;