Osc*_*car 224 javascript floating-point numbers decimal rounding
我有像3.2和的浮点数1.6.
我需要将数字分成整数和小数部分.例如,值3.2将被分成两个数字,即3和0.2
获取整数部分很简单:
n = Math.floor(n);
Run Code Online (Sandbox Code Playgroud)
但是我无法获得小数部分.我试过这个:
remainer = n % 2; //obtem a parte decimal do rating
Run Code Online (Sandbox Code Playgroud)
但它并不总是正常工作.
前面的代码具有以下输出:
n = 3.1 => remainer = 1.1
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
Ign*_*ams 333
使用1,而不是2.
js> 2.3 % 1
0.2999999999999998
Run Code Online (Sandbox Code Playgroud)
gre*_*ala 84
var decimal = n - Math.floor(n)
Run Code Online (Sandbox Code Playgroud)
虽然这不适用于减号,但我们可能不得不这样做
n = Math.abs(n); // Change to positive
var decimal = n - Math.floor(n)
Run Code Online (Sandbox Code Playgroud)
sdl*_*rhc 71
你可以转换为字符串,对吗?
n = (n + "").split(".");
Run Code Online (Sandbox Code Playgroud)
jom*_*odo 29
0.2999999999999998怎么回答?如果我是提问者,我会想要答案.3.我们在这里得到的是错误的精确度,我对floor,%等的实验表明Javascript喜欢这些操作的错误精度.所以我认为使用转换为字符串的答案是正确的.
我会这样做:
var decPart = (n+"").split(".")[1];
Run Code Online (Sandbox Code Playgroud)
具体来说,我使用100233.1,我想要答案".1".
Zan*_*fio 14
这是我如何做到的,我认为这是最简单的方法:
var x = 3.2;
int_part = Math.trunc(x); // returns 3
float_part = Number((x-int_part).toFixed(2)); // return 0.2
Run Code Online (Sandbox Code Playgroud)
Eth*_*han 13
一个简单的方法是:
var x = 3.2;
var decimals = x - Math.floor(x);
console.log(decimals); //Returns 0.20000000000000018Run Code Online (Sandbox Code Playgroud)
不幸的是,这并没有返回确切的值.但是,这很容易修复:
var x = 3.2;
var decimals = x - Math.floor(x);
console.log(decimals.toFixed(1)); //Returns 0.2Run Code Online (Sandbox Code Playgroud)
如果你不知道小数位数,你可以使用它:
var x = 3.2;
var decimals = x - Math.floor(x);
var decimalPlaces = x.toString().split('.')[1].length;
decimals = decimals.toFixed(decimalPlaces);
console.log(decimals); //Returns 0.2Run Code Online (Sandbox Code Playgroud)
Nur*_*lan 10
语言独立方式:
var a = 3.2;
var fract = a * 10 % 10 /10; //0.2
var integr = a - fract; //3
Run Code Online (Sandbox Code Playgroud)
请注意,它仅适用于具有一个小数长度的数字)
您可以使用parseInt()函数来获取整数部分而不是使用它来提取小数部分
var myNumber = 3.2;
var integerPart = parseInt(myNumber);
var decimalPart = myNumber - integerPart;
Run Code Online (Sandbox Code Playgroud)
或者你可以使用正则表达式,如:
splitFloat = function(n){
const regex = /(\d*)[.,]{1}(\d*)/;
var m;
if ((m = regex.exec(n.toString())) !== null) {
return {
integer:parseInt(m[1]),
decimal:parseFloat(`0.${m[2]}`)
}
}
}
Run Code Online (Sandbox Code Playgroud)
一个好的选择是将数字转换为字符串,然后将其拆分。
// Decimal number
let number = 3.2;
// Convert it into a string
let string = number.toString();
// Split the dot
let array = string.split('.');
// Get both numbers
// The '+' sign transforms the string into a number again
let firstNumber = +array[0]; // 3
let secondNumber = +array[1]; // 2
Run Code Online (Sandbox Code Playgroud)
let [firstNumber, secondNumber] = [+number.toString().split('.')[0], +number.toString().split('.')[1]];
Run Code Online (Sandbox Code Playgroud)
无论小数分隔符的区域设置如何,以下情况都有效...条件只有一个字符用于分隔符.
var n = 2015.15;
var integer = Math.floor(n).toString();
var strungNumber = n.toString();
if (integer.length === strungNumber.length)
return "0";
return strungNumber.substring(integer.length + 1);
Run Code Online (Sandbox Code Playgroud)
它不漂亮,但它是准确的.
如果精度很重要,并且您需要一致的结果,则以下是一些命题,它将以字符串形式返回任何数字的小数部分,包括前导“ 0”。如果您需要它作为浮点数,则只需var f = parseFloat( result )在末尾添加即可。
如果小数部分等于零,则将返回“ 0.0”。空,NaN和未定义的数字未测试。
var nstring = (n + ""),
narray = nstring.split("."),
result = "0." + ( narray.length > 1 ? narray[1] : "0" );
Run Code Online (Sandbox Code Playgroud)
var nstring = (n + ""),
nindex = nstring.indexOf("."),
result = "0." + (nindex > -1 ? nstring.substring(nindex + 1) : "0");
Run Code Online (Sandbox Code Playgroud)
var nstring = (n + ""),
nindex = nstring.indexOf("."),
result = ( nindex > -1 ? (n - Math.floor(n)).toFixed(nstring.length - nindex - 1) : "0.0");
Run Code Online (Sandbox Code Playgroud)
var nstring = (n + ""),
narray = nstring.split("."),
result = (narray.length > 1 ? (n - Math.floor(n)).toFixed(narray[1].length) : "0.0");
Run Code Online (Sandbox Code Playgroud)
这是jsPerf链接:https ://jsperf.com/decpart-of-number/
我们可以看到,命题2是最快的。
| 归档时间: |
|
| 查看次数: |
230562 次 |
| 最近记录: |