题解 | #取近似值#

取近似值

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

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

练练练练练

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 17:28
25届每天都在焦虑找工作的事情0offer情绪一直很低落硬撑着面了一个岗位岗位有应酬的成分面试的时候hr给我出各种场景题问的问题比较犀利&nbsp;有点压力面的感觉感觉有点回答不上来本来就压抑的情绪瞬间爆发了呢一瞬间特别想哭觉得自己特别没用没绷住掉眼泪了事后想想觉得自己挺有病的&nbsp;真的破大防了
喜欢唱跳rap小刺猬...:我觉得没关系吧,之前有一次面试leader给我压力面,我顶住了压力,结果入职的时候发现组里氛围很差,果断跑路。其实从面试就能大概看出组的情况,面试体验好的组倒是不一定好,但是面试体验不好的组。。。就很难说
点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 Java
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务