如何从浮点数中得到一个分数?

我有一个浮点数:

var f = 0.1457; 

要么:

 var f = 4.7005 

如何将分数余数作为整数?

即在第一个例子中我想得到:

 var remainder = 1457; 

在第二个例子中:

 var remainder = 7005; 

这样做(最多可达到你需要的4位数,如果你想要更小或更大的数字,可以将乘数(10000)更大或更小):

 Math.ceil(((f < 1.0) ? f : (f % Math.floor(f))) * 10000) 
 function frac(f) { return f % 1; } 

希望有所帮助;-)

虽然这不是大多数人想要的,但是TS要求fract为整数,这里是:

 function fract(n){ return Number(String(n).split('.')[1] || 0); } fract(1.23) // = 23 fract(123) // = 0 fract(0.0008) // = 8 

您可以减去数字的下限,只给出小数部分,然后乘以10000,即:

 var remainder = (f-Math.floor(f))*10000; 

parseInt(parseFloat(amount).toString().split('.')[1], 10)

这也取决于你想对剩余部分做什么(正如已经提到的评论者)。 例如,如果基数为1.03,您是否希望返回的余数为3或03 – 我的意思是,您是希望将其作为数字还是字符串(以便将其显示给用户)。 一个例子是文章价格显示,你不想在03到3(例如$ 1.03)汇总你想要上标03。

接下来,问题在于浮点精度。 考虑一下:

 var price = 1.03; var frac = (price - Math.floor(price))*100; // frac = 3.0000000000000027 

因此,在这种情况下,您可以通过切片字符串表示而不进行乘法(以及可选的零填充)来“解决”这个问题。 同时,您避免浮动精度问题。 也在这个jsfiddle中演示过。

关于浮动精度的这篇文章可能对此有所帮助。

我认为,假设我们想要向用户显示这些值,将这些数字视为字符串将是最好的方法。 这绕过了小数值的问题,例如0.002。

当我试图用上标中的美分显示价格时,我遇到了这个问题。

 let price = 23.43; // 23.43 let strPrice = price.toFixed(2) + ''; // "23.43" let integer = strPrice.split(".")[0] // "23" let fractional = strPrice.split(".")[1] // "43" 
 var strNumber = f.toString(); var remainder = strNumber.substr(strNumber.indexOf('.') + 1, 4); remainder = Number(reminder);