进行parseFloat仅显示一位小数

时间:2018-09-13 09:58:12

标签: javascript floating-point

我正在尝试这样做,以便当用户输入数字时,如果他们碰巧输入了数字,并且该数字有两个或多个小数位,则告诉他们该数字无效,并且只能是小数点后一位并重述提示。

const MIN = 0;
const MAX = 7;
gradeInput = parseFloat( prompt('Enter Grade for ' + codeInput + '') );
while( isNaN( gradeInput ) || gradeInput<MIN || gradeInput>MAX ) 
{
	alert('Your input was invalid');
	gradeInput = parseFloat(prompt('Enter Grade for ' + codeInput + ''));
}

2 个答案:

答案 0 :(得分:0)

您可以使用a regular expression来验证输入是否正确。您可以使用以下模式^\d+(?:\.\d)?$see it on Regex101

const regex = /^\d+(?:\.\d)?$/;

const wrongInput = "12.3.4";
const correctInput = "1.2";

console.log("is wrongInput valid?", regex.test(wrongInput));
console.log("is correctInput valid?", regex.test(correctInput));

正则表达式检查输入的内容是纯数字还是数字,然后是一个点,然后是一个数字。

因此,在您的情况下,您需要在解析之前检查提供的值的格式是否正确:

const regex = /^\d+(?:\.\d)?$/;
let codeInput = "algebra"
let userGradeInput = prompt('Enter Grade for ' + codeInput + '');

while (!regex.test(userGradeInput)) { //if there is no match
  alert('Your input was invalid');
  userGradeInput = prompt('Enter Grade for ' + codeInput + '');
}

gradeInput = parseFloat(userGradeInput);

console.log(gradeInput)

此代码不做其他测试,只是为了说明如何使用正则表达式。要对输入执行所有检查,您可以拥有一个单独的功能,因此可以轻松地重复使用它:

function isValid(input) {
  const MIN = 0;
  const MAX = 7;
  const regex = /^\d+(?:\.\d)?$/;
  
  if (regex.test(input)) { //only do the other checks if the input looks correct
    const parsedInput = parseFloat(input);
    
    return parsedInput > MIN && parsedInput < MAX; //check if it's within bounds
  } else {//it doesn't even look like a number
    return false; 
  }
}

let codeInput = "algebra"
gradeInput = prompt('Enter Grade for ' + codeInput + '');

while(!isValid(gradeInput)) {
  alert('Your input was invalid');
  gradeInput = parseFloat(prompt('Enter Grade for ' + codeInput + ''));
}

console.log(gradeInput)

最后一个注释-正则表达式/^\d+(?:\.\d)?$/是相当简化的。我怀疑这足以满足您的目的,但是我认为值得解释。正则表达式将不允许其他可能有效的输入,例如-2+1.21.1e10-所有这些都可以正确地解析为JavaScript数字格式,甚至可能对于您的代码,但是将被拒绝。有关更全面的浮点数正则表达式,请check the brilliant writeup on the Regular-Expressions.info website

答案 1 :(得分:-1)

您可以使用gradeInput.toPrecision(1) === gradeInput来验证输入

文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision