David Tzoor created ZEPPELIN-1434:
-------------------------------------

             Summary: Long numbers rounding in Zeppelin-Web table
                 Key: ZEPPELIN-1434
                 URL: https://issues.apache.org/jira/browse/ZEPPELIN-1434
             Project: Zeppelin
          Issue Type: Bug
            Reporter: David Tzoor
            Priority: Critical


zeppelin-web is using {{Handsontable}} package to generate the table view 
within the notebooks' paragraphs.
In the [paragraph 
controller|https://github.com/apache/zeppelin/blob/master/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js],
 within the Handsontable object instantiation, the {{cells}} function checks if 
the given value is a number (using {{!isNan(value)}} method). If the value is 
indeed a number, it will render as follows:
{code:javascript}
else if (!isNaN(value)) {
    cellProperties.format = '0,0.[00000]';
    td.style.textAlign = 'left';
    Handsontable.renderers.NumericRenderer.apply(this, arguments);
}
{code}
Since javascript supports numbers between {{-(2^53^ - 1)}} and {{(2^53^ - 1)}}, 
any number not within this range, will be rounded (up or down) and wrong 
numbers will be shown. I suggest to add another condition to check whether the 
number is a safe number:
{code:javascript}
Number.isSafeInteger(parseInt(value))
{code}
In that case, just render the value as a string (no formatting).

The second issue is with very small floats. The current rendering will only 
show up to 5 decimal places. There should be another condition to check if the 
value is a float, and if so use parseFloat or Number(value) to render it with 
the e notation: 
{code:javascript}
function isFloat(a) {
  return a.indexOf('.') !== -1;
}
...
if (isFloat(value)) {
    parseFloat(value);
}
{code}






--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to