how to summarize two fields?
how to summarize two fields?
CathMulder
Posts: 5Questions: 1Answers: 0
I feel a bit stupid, but i can't get it working.
I have 2 int fields, (purchase, marge) and i want to display this computed value:
purchase*((100+marge)/100)
Trying:
{ data: null,
render: function ( data, type, row ) {
return ( row.tbl_article.purchase + row.tbl_article.marge )}},
{ data: null,
render: function ( data, type, row ) {
return ( row.tbl_article.purchase * row.tbl_article.marge )}},
{ data: null,
render: function ( data, type, row ) {
return ( row.tbl_article.purchaseb*b((b100 + row.tbl_article.marge) / 100) )}}
When purchase would be 40 and marge would be 10:
outcome:
first example = 4010
second example = 400 = what to expect
third example = 4004
it seems the + sign combines the field instead of computing the value, but the multiply works correct.
What am i doing wrong here?
This question has accepted answers - jump to:
This discussion has been closed.
Answers
Sounds like your data are strings not numbers. You will need to convert them. This article discusses some options.
Kevin
Thanks for answering but they are both numbers. Thats why i added the multiply.
purchase int(11)
marge int(11)
The multiply is doing the expected job. The plus on the same data isn't.
This is a simple Javascript statement. Datatables does not do anything with or affect this statement. In order to understand the problem we will need to see the data. Please post a link to your page or a test case showing the problem.
https://datatables.net/manual/tech-notes/10#How-to-provide-a-test-case
Kevin
You say they are numbers but you said that you expected the result of 40 + 10 to be 4010. If they are numbers the result would be 50. If they are strings the result would be 4010. However if they are strings then 40*10 is definitely not going to be 400. Hence we need to see your data and example.
Sorry, i can't post a link to my page. This is my script and below are two printscreens.
One of my sql database and one from the browser.
And yes, i know this is a simple statement but i don't understand why the multiply works correct and the sum doesn't.
$(document).ready(function() {
editor = new $.fn.dataTable.Editor( {
ajax: '../../controllers/article.php',
// volgorde in de crud
table: '#example',
fields: [ {
label: 'Artikel:',
name: 'tbl_article.name',
type: 'text'
}, {
label: 'Leverancier:',
name: 'tbl_article.user_id',
type: 'select'
}, {
label: 'Categorie:',![]
} );
(https://datatables.net/forums/uploads/editor/tv/lwwd70uhj9vv.png "")
(https://datatables.net/forums/uploads/editor/vn/vg1hvsedtnq2.png "")
I'm not a JS expert but its a feature of Javascript called Type Coercion. Here is one explanation. You can . see an example here where two strings containing numbers result in a numeric value:
http://live.datatables.net/tecapiqa/1/edit
Datatables tries to automatically discover the data type of the column, explained in the
columns.type
docs. It could be Datatables is typing the column as string. Is there a non-numeric value in either of those columns?Kevin
Oke, thanks for the example. I think you are right by thinking datatables is typing the columns as string. But how can i make datatables typing it as numeric? There is no non-numeric value in either one. To be sure I tried in PHP with the same database and colums and it behaves correctly.
Yes, it' solved now. I added the Number function and now it's works correctly.
// simple sum only for test
data: null,
render: function ( data, type, row ) {
return Number(row.tbl_article.purchase) + Number(row.tbl_article.marge) }},
Thanks kthorngren for letting me think in the right direction!
You can try
columns.type
.You can build us an example with your data. Grab the JSON response using the browser's Developer Tools. If using chrome use the
Response
tab. Steps for this can be found in this technote. Or you can use the Debugger to get the data to provide to the developers to look at.Worst case you can use
parseInt()
.Kevin