gpt4 book ai didi

javascript - 可手动设置百分比格式的前导小数点

转载 作者:行者123 更新时间:2023-11-28 07:23:27 26 4
gpt4 key购买 nike

我认为我发现 Handsontable 将数字输入格式化为百分比的方式存在缺陷(或者根据您对有效数字的立场接受无效输入)。

如果您使用前导小数点 - 百分比格式将不起作用 - 但输入会被接受为有效字符串。这与 numeric.js 不一致,其中以下输入已正确转换(文档建议数字格式应该有效):

var string = numeral(.001).format('0,0.00000%');
// outputs 0.1000%

我发现解决此问题的唯一方法是添加 beforeChanged 事件,以便在触发任何其他事件之前对值调用 parseFloat。我有一种感觉,当复制大量数据时,这会减慢速度。任何人都可以确认这是一个缺陷还是我配置不正确?

下面的 JS Fiddle 取自 Handsontable 页面 - 删除注释掉的 beforeChange 以查看 beforeChange 事件的修复。只需输入以小数点开头的任意数字即可。

http://jsfiddle.net/deenairn/kwfkLqn4/4/

document.addEventListener("DOMContentLoaded", function () {

function getCarData() {
return [{
car: "Mercedes A 160",
year: 2011,
price_usd: 7000,
price_eur: 7000
}, {
car: "Citroen C4 Coupe",
year: 2012,
price_usd: 8330,
price_eur: 8330
}, {
car: "Audi A4 Avant",
year: 2013,
price_usd: 33900,
price_eur: 33900
}, {
car: "Opel Astra",
year: 2014,
price_usd: 5000,
price_eur: 5000
}, {
car: "BMW 320i Coupe",
year: 2015,
price_usd: 30500,
price_eur: 30500
}];
}

var
container = document.getElementById('example1'),
hot;

hot = new Handsontable(container, {
data: getCarData(),
colHeaders: ['Car', 'Year', 'Price ($)', 'Price (€)'],
columns: [{
data: 'car'
// 1nd column is simple text, no special options here
}, {
data: 'year',
type: 'numeric'
}, {
data: 'price_usd',
type: 'numeric',
format: '$0,0.00',
language: 'en' // this is the default locale, set up for USD
}, {
data: 'price_eur',
type: 'numeric',
format: '0,0.00 $',
language: 'de' // i18n: use this for EUR (German)
// more locales available on numeraljs.com
}],
beforeChange:
function(changes, source) {
alert(changes);
}
});

function bindDumpButton() {
if (typeof Handsontable === "undefined") {
return;
}

Handsontable.Dom.addEvent(document.body, 'click', function (e) {

var element = e.target || e.srcElement;

if (element.nodeName == "BUTTON" && element.name == 'dump') {
var name = element.getAttribute('data-dump');
var instance = element.getAttribute('data-instance');
var hot = window[instance];
console.log('data of ' + name, hot.getData());
}
});
}
bindDumpButton();

});

最佳答案

发布在这里:https://github.com/handsontable/handsontable/issues/2430 ,但也不妨在这里发帖:

我相信问题出在 numericRenderer [in handsontable.full.js] 中,它在应用格式之前检查 if (helper.isNumeric(value)) 。如果 value 包含前导小数(例如“.3”),则此语句的计算结果为 false。因此,您可以通过添加前导零来解决此问题:

(helper.isNumeric('0' + value)) 对于前导小数计算结果为 true,但对于非数字 ("0.abaca") 计算结果仍为 false。

关于javascript - 可手动设置百分比格式的前导小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30031975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com