2021.06.11 01:21 AM
Input passed: FormatNumber[enlist -0.331,15]
Output Should be as "-0.331"
but my Code output is "-1.699"
FormatNumber:{[col;DecimalPlaces]
Rows:count col;
$[DecimalPlaces<=4;afterDecimal:1_`string[floor "j"$(10 xexp DecimalPlaces)*col-floor col)%(10 xexp DecimalPlaces)];[fraction:col-floor col;
c:where string[col-floor col] like "*e*";
col[IndexWithNonZeroDigitAfterFouthDecimalPlace]:col[IndexWithNonZeroDigitAfterFouthDecimalPlace]-floor col[IndexWithNonZeroDigitAfterFouthDecimalPlace];
afterDecimal:2_`string[(floor "j"$(10 xexp DecimalPlaces)*fraction)%(10 xexp DecimalPlaces) ];
afterDecimal[IndexWithNonZeroDigitAfterFouthDecimalPlace]:"0",/:1_afterDecimal[IndexWithNonZeroDigitAfterFouthDecimalPlace];
];
PrecisionERR:0.000000000001;
Result:({:reverse "," sv 3 cut reverse string[x] each floor col+PrecisionERR),`".",/: ?[0=count each DecimalPoint:Rows#enlist[DecimalPlaces#"0"]; afterDecimal];
:?[DecimalPlaces>0;Result;ssr[;".";""]each Result]
};
The Above code doesnot work for negative value.
2021.06.19 06:43 AM
U used , rather than ;
Have u looked into .Q.fmt
EMEA
Tel: +44 (0)28 3025 2242
AMERICAS
Tel: +1 (212) 447 6700
APAC
Tel: +61 (0)2 9236 5700
KX. All Rights Reserved.
KX and kdb+ are registered trademarks of KX Systems, Inc., a subsidiary of FD Technologies plc.