在JavaScript中,有没有一种方法可以在不使用任何字符串或正则表达式操作的情况下将0.84729347293923转换为整数?

在JavaScript中,有没有一种方法可以在不使用任何字符串或正则表达式操作的情况下将0.84729347293923转换为整数?,javascript,Javascript,给定0和1之间的任何数字,例如0.84729347293923,是否有一种简单的方法可以将其转换为84729347293923,而无需字符串或正则表达式操作?我可以考虑使用循环,这可能并不比使用字符串更糟糕,因为它是O(n),其中n是数字。但是有更好的办法吗 函数getRandom(){ 设r=Math.random(); 而(数学楼层(r)!=r)r*=10; 返回r; } for(设i=0;i{ 函数getLen(num){ 让currentNumb=num; 设integratedArr

给定0和1之间的任何数字,例如
0.84729347293923
,是否有一种简单的方法可以将其转换为
84729347293923
,而无需字符串或正则表达式操作?我可以考虑使用循环,这可能并不比使用字符串更糟糕,因为它是
O(n)
,其中
n
是数字。但是有更好的办法吗

函数getRandom(){ 设r=Math.random(); 而(数学楼层(r)!=r)r*=10; 返回r; } for(设i=0;i<10;i++)
log(getRandom())好的,只想重构我的代码(我意识到这是错误的,所以这就是我发现的,以便按照您的要求正确获取值)

注意:正如问题所述,“给定0到1之间的任何数字”,此解决方案仅适用于0到1之间的值:

window.onload=()=>{
函数getLen(num){
让currentNumb=num;
设integratedArray=[];
设realLen=0;
/*虽然数字不是整数,但我们将乘以原始数字的副本
*值乘以10,当循环检测到该数字已经是整数时
*while只是中断,在此过程中,我们存储每个转换
*一个名为integratedArray的数组中的数字*/
而(!(Number.isInteger(currentNumb))){
CurrentNum*=10;
integratedArray.push(currentNumb);
}
/*我们迭代数组,并用一个操作比较数组的每个值
*其中,结果值应与项目的实际项完全相同
*数组,在两者相等的情况下,我们将var realLen分配给i,并且
*如果值不相同,我们只需中断循环,如果
*值不一样,这表明我们找到了“垃圾编号”,所以
*我们只是跳过它们*/
for(设i=0;i}
整数模1=0,非整数模1!=0

while ((r*=10) % 1);

一些二进制搜索方法:

如果平均长度<8,则无效

它包含浮点问题

但是,嘿,它是O(logn),浪费了大量的边计算——我想如果把它们计算在内,它的事件会比简单的乘法更糟糕

我更喜欢@chiliNUT答案。一行邮票。
函数floatToIntBinarySearch(数字){
const max_safe_int_length=16;
常数幂=[
1.
10,
100,
1000,
10000,
100000,
1000000,
10000000,
100000000,
1000000000,
10000000000,
100000000000,
1000000000000,
10000000000000,
100000000000000,
1000000000000000,
10000000000000000
]
设currentLength=16
让步骤=16
设_number=number*powers[currentLength]
而(_编号%1!=0 | |)(_编号%10 | 0)==0){
步骤/=2
如果((数字%10 | 0)==0&&!((数字%1!=0)){
currentLength=currentLength-步长;
}否则{
currentLength=步长+currentLength;
}
如果(currentLength<1 | | currentLength>max_safe_int_length*2)抛出错误(“长度异常:+currentLength”)
_数字=数字*幂[当前长度]
console.log(当前长度,_编号)
if(Number.isNaN(_Number))抛出错误(“isNaN:+((Number+).length-2)+“可能大于16?”)
}
返回编号*幂[currentLength]
}
让randomPower=10**(Math.random()*10 | 0)
设test=(Math.random()*randomPower | 0)/randomPower
console.log(测试)

console.log(floatToIntBinarySearch(test))
您提供的数字不是整数。整数是一组整数和零。你可以绕着它走,也可以把它铺成地板。在数学中没有其他选择,你有什么特别的原因想避免字符串操作吗?切掉“0”真的很简单。或者至少可以使用字符串的长度吗?如果数字总是小于1,请将其视为百分比并乘以100。然后用力推或绕它一圈。即使它不小于1,同样的规则也适用。@GetSet得到84,而不是84729347293923。“0到1之间的任何数字”@Riven当
num
给定为
0.84729347293923
时,如何得到
len
非极性代码更正,答案有点难,在我的代码中解释过,但。。。要计算长度,我们首先需要将数字转换为整数,或直接计算逗号或点后的数字,这是该数字的浮点部分的长度,已转换为整数,因此,这就是我如何进行计算,以进行不带正则表达式或字符串操作的转换,在本例中,我通过使用逗号(计算