如何在JavaScript中将整数转换为浮点数?

32

我有一个整数(例如12),我想将其转换为一个指定小数位数的浮点数。

function intToFloat(num, decimal) { [code goes here] }
intToFloat(12, 1) // returns 12.0
intToFloat(12, 2) // returns 12.00
// and so on…
3个回答

58

你已经拥有一个浮点数,它们在JavaScript中都是64位浮点数。

如果要将其渲染为带小数位的字符串(以便进行输出),可以使用.toFixed(),像这样:

function intToFloat(num, decPlaces) { return num.toFixed(decPlaces); }

你可以在这里测试一下(尽管我会重新命名这个函数,因为它并不是准确的描述)。


不错!就像前面的评论者一样,我也不知道有一个内置函数可以做到这一点! :) 我认为使用这样一个简短的函数,没有必要再声明另一个函数,那只会拖慢脚本的运行速度。 - alexia
+1 真不错,当我发现 JavaScript 上有许多隐藏功能时,我真的很喜欢它。 - Marwan
22
注意,toFixed返回的是字符串而不是浮点数。 - Ivan Kuckir
@IvanKuckir 是的,但在这种情况下是可取的,否则你无法区分 12.012.00 - alexia
1
toFixed在IE和其他浏览器中的工作方式不同。 在您的方法中,intToFloat(1.45,1)在IE中将返回“1.5” Crome / FF将返回“1.4” - Simon Borsky
在极少数边缘情况下,整数1的行为可能出现意外。对等于1的整数使用“.toFixed(N)”对我有所帮助。+1 - Llama D'Attore

3

toFixed(x)不是跨浏览器的解决方案。完整解决方案如下:

function intToFloat(num, decPlaces) { return num + '.' + Array(decPlaces + 1).join('0'); }

toFixed 在最新的 Chrome、Firefox、Internet Explorer 和 Opera 稳定版本中都能正常工作。它也可以在 IE5/IE7/IE8/IE9/IE10 文档模式下工作(没有 IE6 文档模式)。其行为是一致的。 - alexia
4
toFixed 在IE中的行为与其他浏览器不同。当你运行 intToFloat(1.45, 1)时,IE会返回 '1.5',而Chrome和Firefox会返回 '1.4'。 - Simon Borsky
我明白了。我没有测试过那个。 - alexia

2
如果您不需要(或不确定需要)固定的小数位数,您可以直接使用。
xAsString = (Number.isInteger(x)) ? (x + ".0") : (x.toString());

在以下情况下,此内容非常相关,例如你有一个x值为7.0,但x.toString()会返回"7",而你需要字符串"7.0"。如果x是一个浮点值,比如7.17.233,那么字符串也应分别为"7.1""7.233"

不使用Number.isInteger():

xAsString = (x % 1 === 0) ? (x + ".0") : (x.toString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接