题解 | #取近似值#
取近似值
https://www.nowcoder.com/practice/3ab09737afb645cc82c35d56a5ce802a
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void async function () { // Write your code here while(line = await readline()){ let tokens = parseFloat(line.split(' '));//转化成浮点型数字 let smallnum = parseInt(tokens);//转化成整型数字,向下取整 if(tokens-smallnum<0.5){ console.log(smallnum); } else{ console.log(smallnum+1) } } }()
我的方法
js字符串转数字
主要方法有三个:转换函数、强制类型转换、js变量弱类型转换。
转换函数
parseInt() 和 parseFloat()两个转换函数。
parseInt()将值转换成整数(向下取整),parseFloat()将值转换成浮点值,()内只能是String值(但是我用了浮点型数字好像也行),否则会返回NaN(Not a Number)。
parseInt("1234blue"); //returns 1234 parseInt("0xA"); //returns 10 parseInt("22.5"); //returns 22 parseInt("blue"); //returns NaN
parseInt()有基模式,第二个参数可以设置进制数,表示当前string表示的数字的进制。但需要注意的是,8进制的数字以0开头,如果表示带有前导的十进制数字,需要设置第二个参数为10。
parseInt("AF", 16); //returns 175 parseInt("10", 2); //returns 2 parseInt("10", 8); //returns 8 parseInt("10", 10); //returns 10 parseInt("010"); //returns 8 parseInt("010", 8); //returns 8 parseInt("010", 10); //returns 10
parseFloat()没有基模式。
parseFloat("1234blue"); //returns 1234.0 parseFloat("0xA"); //returns NaN parseFloat("22.5"); //returns 22.5 parseFloat("22.34.5"); //returns 22.34 parseFloat("0908"); //returns 908 parseFloat("blue"); //returns NaN
强制类型转换
使用强制类型转换(type casting)处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。
ECMAScript中可用的3种强制类型转换如下:
- Boolean(value)——把给定的值转换成Boolean型;
- Number(value)——把给定的值转换成数字(可以是整数或浮点数);
- String(value)——把给定的值转换成字符串。
用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。
Boolean(value)
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。
Boolean(""); //false – empty string Boolean("hi"); //true – non-empty string Boolean(100); //true – non-zero number Boolean(null); //false - null Boolean(0); //false - zero Boolean(new Object()); //true – object
Number(value)
与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。
Number(false); //0 Number(true); //1 Number(undefined); //NaN Number(null); //0 Number( "5.5 "); //5.5 Number( "56 "); //56 Number( "5.6.7 "); //NaN Number(new Object()); //NaN Number(100); //100
String(value)
var s1 = String(null); //"null" var oNull = null; var s2 = oNull.toString(); //won't work, causes an error
js变量弱类型转换
var str= '012.345 '; var x = str-0; x = x*1;
别人的方法
Math.around(x)
round() 方法可把一个数字舍入为最接近的整数。
注意:x必须是数字。
parseInt(num+0.5)
给num+0.5再向下取整。
分割整数部分和小数部分
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { // Write your code here while ((line = await readline())) { let floatNum = line.split("."); let num = Number(floatNum[0]); let point = Number(line) - num; if (point >= 0.5) { num += 1; } console.log(num); } })();
练练练练练 文章被收录于专栏
练练练练练