【问题标题】:Cannot convert string into number with parseFloat method无法使用 parseFloat 方法将字符串转换为数字
【发布时间】:2019-03-05 14:52:42
【问题描述】:

我正在尝试创建一个关于作家的数据可视化。我创建了 csv 文件,然后由 d3.csv 函数处理。我还定义了另一个函数来处理一些值作为数字而不是字符串(特别是出版年份、页面和价格)。但是,当我将页面加载到浏览器中时,控制台仍将这些值作为字符串返回。你能帮我理解为什么以及如何解决它吗?谢谢!

      <script type="text/javascript" src="d3.js">
  
      var w = 500;
      var h = 520;
      var padding = 30;

      var svg = d3.select("body").append("svg")
                .attr("width", w)
                .attr("height", h);

      var rowConverter = function(d) {
        return {
          author: d.author,
          title: d.title,
          publisher: d.publisher,
          year: parseFloat(d.year),
          pages: parseFloat(d.pages),
          price: parseFloat(d.price)
        };
      }

          d3.csv("libri_nuovi.csv", rowConverter, function(data) {
            console.log(data);
          });


      </script>
</body>

【问题讨论】:

  • 你能发布一个问题的最小运行示例吗?
  • 如果我必须打赌,我会说这是 v5 与 v4 的问题。像这样的东西:"d3 importing csv file to array [duplicate]"。你用的是什么版本?你能发布console.log(d3.version)的输出吗?
  • 这是控制台中的输出:对象作者:“Claudio Magris”页面:“400”价格:“30”发布者:“Mondadori”标题:“Danubio”年份:“1996”proto: Object 这是我正在使用的 d3 版本:console.log(d3.version); 5.8.0 谢谢!

标签: d3.js parsefloat


【解决方案1】:

就像高积云在他的评论中指出的那样,您正在使用旧的 csv api 和新的 d3 版本。在旧 API 中,您可以提供回调函数作为最后一个参数。由于new API 使用了 fetch,它现在返回一个 Promise。

对于 5.8.0 版本,您可以像下面这样重写您的函数:

    d3.csv(",", "libri_nuovi.csv", function(d) {
      return {
        author: d.author,
        title: d.title,
        publisher: d.publisher,
        year: +d.year, // convert "year" column to number
        pages: +d.pages,
        price: +d.price,
     };
   }).then(function(data) {
     console.log(data);
   });

这是未经测试的代码,因为您没有发布初始 json,但我认为它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    相关资源
    最近更新 更多