【问题标题】:Calculation outputs NaN on website, works in jsFiddle [duplicate]计算在网站上输出 NaN,在 jsFiddle 中工作 [重复]
【发布时间】:2014-02-09 23:48:08
【问题描述】:

我正在尝试计算页面上两美元值的百分比。我的代码在 jsFiddle 中工作,但是每当我尝试在我的网站上实现它时,代码都会输出 NaN,所以我知道我将美元金额转换为我可以使用的数字时一定存在一些问题。我认为我的脚本没有冲突,因为我在控制台中没有收到任何错误。

http://jsfiddle.net/f9rGj/

我用红色突出显示了我要计算的两个数字。

var price1 = $('.Value em.ProductPrice strike').text();
var price2 = $('.YouSave .YouSaveAmount').text();

var number1 = Number(price1.replace(/[^0-9\.]+/g,""));
var number2 = Number(price2.replace(/[^0-9\.]+/g,""));

var savings = (Math.floor((number2 / number1) * 100));

$('#savepercent').text(savings);

有没有人知道为什么这可能会吐出 NaN?也许我需要尝试以其他方式转换美元金额?

感谢我收到的反馈,我能够在我的网站上使用此功能。

工作代码:

var price1 = $('.Value em.ProductPrice strike').text();
var price2 = $('.YouSave .YouSaveAmount').text();


var number1 = parseInt(price1.replace(/[^\d\.]/g, ''));
var number2 = parseInt(price2.replace(/[^\d\.]/g, ''));

var savings = (Math.floor((number2 / number1) * 100));

$('#savepercent').text(savings);

【问题讨论】:

  • 如果它在 jsfiddle 中工作,还有其他问题。您应该从您的网站中删除代码,直到它正常工作,或者只使用 console.log 来查看中间值。
  • 在 Chrome 等中使用 F12 调试器来检查您的代码、断点和视图值等。调试是关于反馈和体面的工具使它变得如此容易。
  • 学习在浏览器中使用步进调试器!您是否尝试过使用alert()console.log() 来查看number1number2 的设置?

标签: javascript math nan


【解决方案1】:

使用正确的字符串到数字的转换函数:

Number.parseFloat()

Number.parseFloat() 方法解析一个字符串参数并返回一个 浮点数。此方法的行为与全局相同 函数 parseFloat 并且是 ECMAScript 6 的一部分(其目的是 全局变量的模块化)。

Number.parseInt()

Number.parseInt() 方法解析一个字符串参数并返回一个 指定基数或基数的整数。此方法的行为相同 到全局函数 parseInt 并且是 ECMAScript 6 的一部分(它是 目的是全局变量的模块化)。

了解您的正则表达式

您应该使用\D,即Any non-digit,而不是自己尝试。

\[^\D\.\,\] 将匹配任何非数字和.,(在美国以外用于分隔符而不是,)。看到这个link

【讨论】:

  • 全部正确,但它被强制为一个数字(并且 JSFiddle 确实有效)
  • 我已经弄明白了,谢谢 Jarrod!我已经用我正在工作的代码更新了我的问题。
猜你喜欢
  • 1970-01-01
  • 2012-12-03
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多