【问题标题】:How do you convert the value of a variable from a string to an integer in Javascript?你如何在Javascript中将变量的值从字符串转换为整数?
【发布时间】:2016-09-15 15:05:56
【问题描述】:

我做了一个小提琴! https://jsfiddle.net/ajc100/vrzme0st/

我正在尝试制作一个保险计算器(使用假数字)。它由一个带有单选按钮和下拉列表的表单组成,每个单选按钮或下拉列表的值都是一个数字。我使用 alert 来表明根据用户的选择应用了正确的数字。我现在需要做的是把这些数字加在一起得到一个总数。我遇到的问题是我不确定如何将变量的值(一个数字)转换为整数,以便 Javascript 将其理解为数字并可以添加它。这是我的代码。 (实际上是 Jquery)。如您所见,我尝试了一些不同的方法来将变量的值转换为数字,但似乎没有任何效果。非常感谢任何帮助。

 <ul>
  <li><form id="sex"><legend>Sex</legend> <fieldset>
  <input type="radio" name="sex" value="20" id="Female" class="firstInput css-checkbox" />
  <label class="css-label" for="Female">Female</label>
     <input type="radio" name="sex" value="30" id="Male" class="css-checkbox" />
     <label class="css-label" for="Male">Male</label></fieldset>
      </form>
      </li>

  <li>
  <form id="age"><legend>Age</legend><fieldset>
    <input type="radio" id="sixteen" name="age" value="40" class="firstInput css-checkbox" />
    <label class="css-label" for="sixteen">16-25</label>
      <input id="twentysix" type="radio" name="age" value="30" class="css-checkbox" />
      <label class="css-label" for="twentysix">26-34</label>
        <input type="radio" id="thirtyfive" name="age" value="20" class="css-checkbox"  />
        <label class="css-label" for="thirtyfive">35-50</label>
          <input type="radio" name="age" id="fifty" value="15" class="css-checkbox" />
          <label class="css-label" for="fifty">50+</label></fieldset>
          </form>
          </li>

  <li>Car Color
    <select name="color" id="car">
      <option value="80">red</option>
      <option value="50">silver</option>
      <option value="50">black</option>
      <option value="30">white</option>
      <option value="50">other</option>
    </select>
  </li>

  <li>Car Year
    <select name="year" id="year">
      <option value="60">2015+</option>
      <option value="40">2000 - 2015</option>
      <option value="60">1999 or before </option>

    </select></li>

    <li>Citations in past year
      <select name="citations" id="citations">
        <option value="20">1</option>
        <option value="30">2</option>
        <option value="40">3+</option>

      </select>

    </li>
  </ul>

  <hr>
  <div class="total">Total</div>

</div>

<script>

  $('#sex input').on('change', function() {
   var sex = ($('input[name="sex"]:checked', '#sex').val()); 
   parseInt(sex);
   alert(sex);
 });

  $('#age input').on('change', function() {
   var age = ($('input[name="age"]:checked', '#age').val()); 
   number(age);
   alert(age);
 });

  $('#car').on('change', function() {
   var car = parseInt($('#car').val(),10); 
   alert(car);
 });

  $('#year').on('change', function() {
   var year = +($('#year').val()); 
   alert(year);
 });

  $('#citations').on('change', function() {
   var citations = ($('#citations').val()); 
   parseInt(citations);
   alert(citations);
 });

我试过了,还是不行。即使将它们切换为数字后,我似乎也无法将变量加在一起:

<script>
$(document).ready(function() {

  $('#sex input').on('change', function() {
    sex = ($('input[name="sex"]:checked', '#sex').val());
    sex = +sex;
  });

  $('#age input').on('change', function() {
    age = ($('input[name="age"]:checked', '#age').val());
    age = +age;
  });

  $('#car').on('change', function() {
    car = ($('#car').val());
    car = +car;
  });

  $('#year').on('change', function() {
    year = ($('#year').val());
    year = +year;
  });

  $('#citations').on('change', function() {
    citations = ($('#citations').val());
    citations = +citations;
  });

  var total = sex + age + car + year + citations;
  $(".total").text("Total: " + total);

});

</script>

【问题讨论】:

  • @BilltheLizard 他已经知道parseInt 函数。他的困惑在于一般如何使用函数。
  • 您要在哪里添加值?
  • 我正在尝试根据某人选择的答案添加值以得出汽车保险的总费用。

标签: javascript jquery html integer


【解决方案1】:

parseIntNumber返回数值的函数。他们不会改变论点。

所以写:

sex = parseInt(sex);

或:

age = number(age);

但更简单和最有效的是酉加:

age = +age;

您不会在添加变量值的位置显示代码,但是在您像这样转换它们之后,您可以按预期添加它们。

事件顺序和自动创建的变量

您的代码的问题在于,您在页面加载时计算总数,而单击处理程序(sexage、...)未设置任何变量。 相反,它们是由浏览器自动为每个具有“id”属性的元素创建一个具有该名称的变量的规则设置的。 但是这些变量代表 DOM 元素,所以你的总数不能工作。此外,当用户更改选择时,该总数永远不会更新。

我建议使用以下代码:

function refreshTotal() {
    var sex = +$('input[name="sex"]:checked', '#sex').val();
    var age = +$('input[name="age"]:checked', '#age').val();
    var car = +$('#car').val();
    var year = +$('#year').val();
    var citations = +$('#citations').val();
    var total = sex + age + car + year + citations;
    $(".total").text("Total: " + total);
}

// Create one handler for all input/select changes:
$('input,select').on('change', refreshTotal);

// Also at page load, calculate the total 
$(refreshTotal);

【讨论】:

  • 我试过这个,但我仍然没有任何运气。我将添加到我原来的问题中,向您展示我做了什么。
  • 那是因为你还有一些其他的概念问题。请参阅我的答案的补充。我添加了一些有效的代码。
  • 好的,到目前为止一切顺利,但还有一件事。当我们在页面加载时刷新它时,它会将 NaN 显示为总数。我宁愿没有那个,所以我在页面加载时删除了对函数的调用,这会解决这个问题,但是当你第一次选择男性或女性时,它会显示 NaN 并且只在之后更改为数字已做出另一个选择。想法?
  • 要么将调用 refreshTotal() 的代码放在 body 标记的末尾之前,要么将 refreshTotal(不带括号)传递给 $(...);,因此它仅在 DOM 时执行准备好了。我在回答中这样更新了它。
  • 实际上,在我问了最后一个问题之后,我意识到如果我也无序地回答问题也不起作用,我认为那是因为它试图获取变量的值尚未进行选择的地方,所以我添加了一些代码来检查每个是否为 NaN,如果是,则将其更改为 0 并处理它。谢谢大家的帮助!!!
【解决方案2】:

调用函数时,一般需要将结果赋值给某处;该函数不能更改变量本身的值(将对象作为参数的函数可以修改对象的内容,但这与修改调用中使用的变量不同)。当你写

parseInt(sex);

它调用函数,但不对结果做任何事情。你需要做的:

sex = parseInt(sex, 10);

您还应该在调用parseInt 时始终指定基数;规范不要求默认为十进制,一些旧浏览器有不同的默认值。

【讨论】:

  • 我不明白为什么这被否决了。你得到了我的投票。
  • @trincot 有人对所有答案投了反对票。我怀疑是欺骗选民,他可能认为这太琐碎了,懒得回答。
  • 啊,是的,可能就是这样。
  • 我试过这个以及下面这个回答者的建议。我仍然无法将变量值加在一起。它与我设置代码的方式有关吗?也许与范围有关?
  • 您在页面首次加载时计算总数,但在用户编辑输入后您从未更新它。
【解决方案3】:

您可以通过

将字符串转换为int
var a = "10";
var b = parseInt(a); 

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多