题解 | #取近似值#

取近似值

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);
    }
})();

练练练练练 文章被收录于专栏

练练练练练

全部评论

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
牛客279957775号:铁暗恋
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务