我有像 3.2
和 1.6
这样的浮动数字 .
我需要将数字分成整数和小数部分 . 例如, 3.2
的值将分为两个数字,即 3
和 0.2
获取整数部分很简单:
n = Math.floor(n);
但是我无法获得小数部分 . 我试过这个:
remainer = n % 2; //obtem a parte decimal do rating
但它并不总是正常工作 .
前面的代码具有以下输出:
n = 3.1 => remainer = 1.1
我在这里缺少什么?
17 回答
根据您之后会给出的用途,但这个简单的解决方案也可以帮助您 .
我不是说它是一个很好的解决方案,但对于一些具体案例来说
但这需要比@Brian M. Hunt提出的解决方案更长的时间
语言独立方式:
请注意,它只适用于具有一个fractioanal长度的数字)
您可以将其转换为字符串并使用
replace
方法将整数部分替换为零,然后将结果转换回数字:使用
1
,而不是2
.虽然这不适用于减号,但我们可能不得不这样做
你可以转换为字符串,对吗?
0.2999999999999998怎么回答?如果我是提问者,我会想要答案.3 . 我们这里有的是错误的精确度,我对floor,%等的实验表明Javascript喜欢这些操作的错误精度 . 所以我认为使用转换为字符串的答案是正确的 .
我会这样做:
具体来说,我使用100233.1,我想要答案“.1” .
这是我如何做到的,我认为这是最简单的方法:
一个简单的方法是:
不幸的是,这并没有返回确切的值 . 但是,这很容易修复:
如果你不知道小数位数,你可以使用它:
无论小数分隔符的区域设置如何,以下情况都适用...条件只有一个字符用于分隔符 .
它不漂亮,但它是准确的 .
如果精度很重要并且您需要一致的结果,这里有一些命题会将任何数字的小数部分作为字符串返回,包括前导"0." . 如果你需要它作为一个浮点数,最后添加
var f = parseFloat( result )
.如果小数部分等于零,则返回“0.0” . Null,NaN和未定义的数字未经过测试 .
1. Array.split
2. String.substring,String.indexOf
3. Math.floor,Number.toFixed,String.indexOf
4. Math.floor,Number.toFixed,String.split
这是一个jsPerf链接:https://jsperf.com/decpart-of-number/
我们可以看到命题#2是最快的 .
您可以使用
parseInt()
函数来获取整数部分,而不是使用它来提取小数部分我有一个案例,我知道所有相关的数字只有一个小数,并希望得到小数部分为整数,所以我最终使用这种方法:
这也适用于整数,在这些情况下返回0 .
我在用:
输入:-556.123444444
结果: 123444444
看完其中的几个后,我现在正在使用......