的JavaScript。 Math.sqrt给NaN一个正数? [英] Javascript. Math.sqrt giving NaN to a positive number?

查看:68
本文介绍了的JavaScript。 Math.sqrt给NaN一个正数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前有一个脚本,它从文本区域获取数字,并使用它们进行各种计算。我的标准偏差功能有问题,因为它不会输出值,即使它的类型是数字,也是正数(.56)。

I currently have a script that takes numbers from a text area and does all sorts of calculations with them. I am having trouble with my standard deviation function because it will not output the value even though it's type is number, and it is positive (.56).

当我运行此代码时

var variance = findVariance(array);
    variance = parseFloat(variance);
    alert(typeof variance);

结果是


数字

number

值为.56(我知道因为当我不使用parseFloat时它返回.56作为一个字符串)。因此,当我运行此代码时,我感到困惑

And the value is .56 (which I know because when I don't use parseFloat it returns .56 as a string). So I am baffled when I run this code

alert("variance " + variance);
alert("sd" + Math.sqrt(variance));

并且两个警报都返回


NaN

NaN

这是创建textarea的代码,调用函数processData(它将myTextArea的输入收集到一个数组,然后调用函数findStandardDeviation)我也可以发布方差函数。

This is the code that creates the textarea, calls the function processData( which gathers the input from myTextArea into an array and then calls the function findStandardDeviation) I can post the variance function as well if you'd like.

<textarea id="myTextArea" rows = "7" cols = "50"></textarea><br>

<button onclick="processData()">Done</button>

<p id = "sd"></p>

<script type = "text/javascript">

        var standard_deviation = 0;

        var sdOutput = document.getElementById('sd'); 

    function processData()
    {
        var arrayOfLines = document.getElementById('myTextArea').value.split('\n');


        findStandardDeviation(arrayOfLines);
    }

这是我可以管理的最简化的脚本形式:

This is the most reducible form of my script I could manage:

var mean = 0;
var median = 0;
var count = length;
var mode = 0;
var variance = 0;
var standard_deviation = 0;

var meanOutput = document.getElementById('mean');
var countOutput = document.getElementById('count');
var sumOutput = document.getElementById('sum');
var varianceOutput = document.getElementById('variance');
var sdOutput = document.getElementById('sd');

function processData() {
  var arrayOfLines = document.getElementById('myTextArea').value.split('\n');

  var sum = findSum(arrayOfLines);
  findMeanOutput(arrayOfLines, sum);
  findVariance(arrayOfLines);
  findStandardDeviation(arrayOfLines);
}

function findSum(array) {
  var count = array.length;
  var sum = 0;

  for (var a = 0; a < array.length; a++) {
    sum += parseInt(array[a]);
  }

  countOutput.innerHTML = "Count: " + array.length;
  sumOutput.innerHTML = "Sum: " + JSON.stringify(sum);
  sum = parseInt(sum);
  return sum;
}

function findMean(array) //Used for finding mean and then returning it
{
  var sum = 0;

  for (var a = 0; a < array.length; a++) {
    sum += parseFloat(array[a]);
  }

  mean = sum / array.length;
  return mean;
}

function findMeanOutput(array, sum) //finds mean and then establishes it as the mean for users input
{
  mean = sum / array.length;
  meanOutput.innerHTML = "Mean: " + mean;
}

function findVariance(array) {
  var mean = findMean(array);

  var variance = "Variance: " + findMean(array.map(function(num) {
    return Math.pow(num - mean, 2);
  })).toFixed(2);

  varianceOutput.innerHTML = "Variance: " + variance;
  return variance;
}

function findStandardDeviation(array) {
  var variance = findVariance(array);
  variance = parseFloat(variance);
  alert(typeof variance);
  alert("variance " + variance);
  alert("sd" + Math.sqrt(variance));
  sdOutput.innerHTML = "Standard Deviation: " + Math.sqrt(variance).toFixed(2);
}

<html>

<head>
</head>

<body>
  <p> Please enter a series of numbers, each separated by a new line.<br>
    <p>
      <textarea id="myTextArea" rows="7" cols="50"></textarea><br>
      <button onclick="processData()">Done</button>
      <p id="mean"></p>
      <p id="count"></p>
      <p id="sum"></p>
      <p id="variance"></p>
      <p id="sd"></p>
</body>

</html>

推荐答案

.56 不是整数,所以你不应该使用 parseInt函数 parseFloat 是您正在寻找的功能。或者更简单:数字

.56 is not an integer, so you shouldn’t use parseInt. parseFloat is the function you’re looking for. Or much simpler: Number.

这篇关于的JavaScript。 Math.sqrt给NaN一个正数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆