JS-如何将用户输入的一个数四舍五入保留相应位数的小数同时保证这个数是数字类型①

题目分析

  1. 在界面中让用户输入一位数
  2. 判断用户输入的是否是一个数,如果不是请用户重新输入,直到输入成功为止
  3. 让用户在界面中输入他想要把这个小数保留的位数
  4. 判断用户输入的保留小数是否合法,如果不是请用户重新输入,直到输入成功为止
  5. 将这个数四舍五入保留相应位数的小数
  6. 如果碰到最后小数位是0,系统自动省略
  7. 检验他是否是个数字类型

需求实现

需求一

在界面中让用户输入一个数

	var num = +prompt('请输入你要查询的数字')

这里让用户随机输入一位数,+可以将他强转为数据类型

需求二

判断用户输入的是否是一个数,如果不是请用户重新输入,直到输入成功为止

	 while (isNaN(num)) {
             alert('输入错误,请重新输入')
             num = +prompt('请输入你要查询的数字');
         }

这里用while的原因是不知道用户输错多少次,isNaN(num)是为了判断他是否是一个数字类型;

需求三

让用户在界面中输入他想要把这个小数保留的位数

	var d = +prompt('请输入你要保留的小数位数')

这里让用户输入他想要把这个小数保留的位数,+可以将他强转为数据类型

需求四

判断用户输入的保留小数是否合法,如果不是请用户重新输入,直到输入成功为止
这里可能出现三种情况会错误

  • 输入的不是一个数字
  • 输入的不是正数
  • 输入的不是整数
 	while (isNaN(d) || d < 0 || (d % 1 != 0)) {
             alert('小数位位数必须在0-100之间,您输入的数据不再范围中...')
             d = +prompt('请重新输入你要保留的小数位数')
         }

这里用或者是因为在逻辑或中,返回第一个为真的表达式,第一个不满足的情况下可以继续看第二个;这里不满足任何一个都不行

需求五

将这个数四舍五入保留相应位数的小数(这里我习惯将数字复制一份)

		// 先把数据复制一次
         var copyNum = num;
         //  将小数点向右移动n位
         copyNum = copyNum * (10 ** d)
             //  检查是否移动成功
             //  console.log(copyNum)
             //  将这个数四舍五入
         copyNum = Math.round(copyNum)
             //  再将小数位移回去
         copyNum /= (10 ** d)
             //  console.log(copyNum)

这里我先利用乘法将数扩大10 ** d倍,利用Math.round()把扩大的数四舍五入,在把前面扩大的数除去

需求六

如果碰到最后小数位是0,系统自动省略,补小数位数

		// 补小数位数
         copyNum=copyNum.toFixed(d)

需求七

检验他是否是个数字类型

	if (isNaN(copyNum)) {
             alert('对不起,你电脑卡了')
         } else {
             console.log (copyNum)
             
         }

文中没有将他转换成别的类型,所以不存在这个问题,但是还是留下来检验比较稳妥。

总结

	var num = +prompt('请输入你要查询的数字')
	while (isNaN(num)) {
             alert('输入错误,请重新输入')
             num = +prompt('请输入你要查询的数字');
         }
    var d = +prompt('请输入你要保留的小数位数')
    while (isNaN(d) || d < 0 || (d % 1 != 0)) {
             alert('小数位位数必须在0-100之间,您输入的数据不再范围中...')
             d = +prompt('请重新输入你要保留的小数位数')
         }
   var copyNum = num;
   copyNum = copyNum * (10 ** d)
   copyNum = Math.round(copyNum)
   copyNum /= (10 ** d)
   copyNum=copyNum.toFixed(d)
   if (isNaN(copyNum)) {
             alert('对不起,你电脑卡了')
         } else {
             console.log (copyNum)
             
         }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值