【问题标题】:How to show percentage instead of ratio in handsontable?如何在handsontable中显示百分比而不是比率?
【发布时间】:2015-03-17 16:27:46
【问题描述】:

Handsontable 使用 numeric.js 来格式化数字等。

如果数据类型设置为数字并且数据格式设置为 0.00%,handsontable (numeral) 可以很好地将其格式化为百分比格式。例如,如果值为 0.5,则会自动格式化为 50%。

但当用户尝试编辑该值时,他们看到的是 0.5 而不是 50%。这是有道理的,除了 Excel 的行为方式不是这样,而且我的用户是 Excel 的重度用户(Excel 显示实际的百分比数字)。有没有办法让它在编辑时显示“50”而不是 0.5?我查看了 numeric.js 代码,发现这个函数 formatPercentage 将数字乘以 100,用 % 符号等填充它。可以更改此函数的工作方式以使其模仿 MS Excel。但是,有没有办法在不改变 numeric.js 的情况下做到这一点?

这是上面的一个例子(看第三列 - 价格列) http://jsfiddle.net/suk9g9cm/

{
    data: "price_usd",
    type: 'numeric',
    format: '0,0.00%',
    language: 'en' //this is the default locale, set up for USD
  },

【问题讨论】:

    标签: javascript handsontable


    【解决方案1】:

    我自己也遇到过类似的问题,并且有一个未经测试的解决方案。让我告诉你到目前为止所知道的。 Handsontable 有一个编辑器和一个渲染器。编辑器会模拟您的数据,因此如果您输入 0.5,那么无论何时您编辑该单元格,它都会显示该值。渲染器是您离开单元格后看到的内容,在您的情况下,您格式化了该值,因此 0.5 将显示为 50%。该值仅用于显示,正如您所指出的,numericjs 乘以 100 并添加 %

    但是,您正在寻找的是一种基本上将数据数组保持为 0.5,但在编辑时将其更改为 50,并在渲染时保留为 50% 的方法。

    这里有一个解决方案:

    使用编辑上的事件,查看单元格的值。如果它低于 1,则乘以 100(这将改变实际值,因此我们必须稍后进行调整)。在 afterChange 上,如果值大于 1,则除以 100,否则离开(用户可能已经空白并再次输入 0.5,因此如果您没有此检查,该值将下降到 0.005)。

    请注意,在 Excel 提供的另一种情况下,用户可能已输入 50,因此此方法实际上会修改此值,并始终保留值为 0.5 的数据数组。如果这不是您想要的,那么事情会变得更难做,所以假设现在这是可以接受的。

    这应该可以解决问题,尽管我还没有对其进行测试,并且可能有一些我很想听听的极端情况。

    在此期间告诉我它是否有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      相关资源
      最近更新 更多