|
|
You should declare the object in your Form class and initialise it in the constructor or FormLoad event. It is then available to every other event handler or method within that class, whether public or private. This is basic C++ and nothing specific to CLI or Form apps.
|
|
|
|
|
Cheers Richard.
Please very quick question: do you know why the below code compiled but tirggered an error msg box
Unable to cast object of type System.Data.DataColumn to type System.IConvertible
lblvol->Text=System::Convert::ToString(sqrt(System::Convert::ToDouble(dbdataset->Columns["DataReturn"])));
I was just aiming at computing the standard deviation of my return series held in ["DataReturn""]. can't see anything wrong as sqrt () is a built-in function from
#include "math.h"
Cheers
|
|
|
|
|
My first suggestion would be: "don't write compound statements like that". As you can see they are almost impossible to figure out when they go wrong. Use interim values so you can check each stage of the code, like:
string dataReturn = dbdataset->Columns["DataReturn"];
double doubleValue = System::Convert::ToDouble(dataReturn);
double squareRoot = sqrt(doubleValue);
lblvol->Text = Convert::ToString(squareRoot);
Easier and clearer, and simple to step through with the debugger when errors occur.
|
|
|
|
|
Richard,
Thanks for the advice. I will try it and let you know. Any idea why string type does not work from my side as opposed to your post? I am currently going it to see if people have encountered a similar issue.
Best,
|
|
|
|
|
Member 11230372 wrote: Any idea why string type does not work from my side Not without seeing the context I'm afraid. You can only use a string in the place where a string is valid.
|
|
|
|
|
might be a missing #include... as something is not logic here. as a matter of fact while typing any type double, float, char they are highlighted in blue therefore you could define any variable anywhere in the code based on those type.
however while typing string, the latter does not seem to be recognized at all (not even highlighted). string is considered as plain text and thus unrecognized
bizzare...
Cheers
|
|
|
|
|
double, float, char are basic types which are part of the language, while string does not exist, but String (with capital S) is a class. If I spelt it with a lower case s before, then I apologise, as that is C# rather than C++.
|
|
|
|
|
Thanks Richard for the feedback, and no worries.
The string class is an instantiation of the basic_string class template that uses char (i.e., bytes) as its character type, with its default char_traits and allocator types (see basic_string for more info on the template).
I will therefore work on your previous post and revert back to you tomorrow. Cheers
|
|
|
|
|
|
Hi Richard
Thanks. I've made a simple console app and can confirm that the String class does work and you could create string variables such as string codeproject without problem. However,based on facts it looks like a different story when dealing with c++/cli.
Back to the main standard deviation calculation, i think it could not work as a columns can't directly be assigned to a type and treated like a variable (see below). it could have worked in vba by selecting the column range and perform the built-in functions: c++ sqrt() or math::sqrt().
Hence the solution of last resort: iterate through each row and perform the calculation in several steps (get the mean from "DataRet" column first, then carry out ... ) unless a you have a better idea. Cheers
Error C2440: 'initializing' : cannot convert from 'System::Data::DataColumn ^' to 'double'
DataTable^dbdataset=gcnew DataTable();
DataColumn^rt_col=gcnew DataColumn();
rt_col->ColumnName = "DataRet";
rt_col->DataType=System::Type::GetType("System.Double");
dbdataset->Columns->Add(rt_col);
sda->Fill(dbdataset);
double varet = dbdataset->Columns["DataRet"];
double vola = sqrt(varet);
lblvol->Text = Convert::ToString(vola);
|
|
|
|
|
Member 11230372 wrote: it looks like a different story when dealing with c++/cli Many things are different if you use C++/CLI, it is not something I have worked with, as C# is so much more intuitive, even though my background is mainly C++.
Member 11230372 wrote: Error C2440: 'initializing' : cannot convert from 'System::Data::DataColumn ^' to 'double' Of course you cannot convert a DataColumn to a double , they are totally different things; remember a column is a collection of cells not a single item. You can hold a double value in a DataColumn 's cell, but you need to access that with both the row and column indices.
|
|
|
|
|
Thanks Richard. i've therefore coded the calculation of standard deviation (see below). However results differ from Excel from the 3rd decimal point.Do you have any idea, as i have done it meticulously?
I remembered someone working on sql server told me that depending on datatype used, computing 1/2 lead to a value close to 0.5 but still not 0.5. Do you think it might be an explanation, here?
Cheers
int obs;
double mu, Ssigma, Svari, sum=0,sumsqr=0;
for (int i=1;i-1<dbdataset->Rows->Count-1;i++){
dbdataset->Rows[i-1]["DataRet"]=(System::Convert::ToDouble(dbdataset->Rows[i-1]["Population"])/System::Convert::ToDouble(dbdataset->Rows[i]["Population"])-1);
sum = sum + System::Convert::ToDouble(dbdataset->Rows[i-1]["DataRet"]);
obs = (dbdataset->Rows->Count-1);
mu = sum /obs;
sumsqr=sumsqr + pow((System::Convert::ToDouble(dbdataset->Rows[i-1]["DataRet"])-mu),2);
Svari=sumsqr/(obs-1);
Ssigma=sqrt(Svari);
lblvol->Text = Convert::ToString(Ssigma);
|
|
|
|
|
Sorry, I only ever spent a year doing advanced maths, and that was more than 50 years ago.
|
|
|
|
|
No worries Richard, and please note that I do thank you for your overall support.
Cheers
|
|
|
|
|
Hi all
I have a problem to formatted an int to the special format
example :
Int exp_int = 5640100;
a need writes the integer to 5 640 100
|
|
|
|
|
I'll tell you what you should do... but not how (you can look that up).
0.Load your integer to a string.
1.Every third character (right to left), insert a space.
2.Finish parsing loop when you have less than or equal to three characters left.
|
|
|
|
|
Have you looked at the GetNumberFormat() function? You can format numbers based on a specific locale, or a custom format (e.g., using a space as the thousand separator).
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
C has a powerful printf[^] function to format variables...
Skipper: We'll fix it.
Alex: Fix it? How you gonna fix this?
Skipper: Grit, spit and a whole lotta duct tape.
|
|
|
|
|
Hi all
might I ask some advice/fixes on the below code, as I am still not familiar with referencing multiple columns from DataTable in c++ yet? Your inputs would be much appreciated. Thanks in advance.
MySqlCommand^CmdDataBase = gcnew MySqlCommand("select * from world.city",conDataBase);
try{
conDataBase->Open();
MySqlDataAdapter^sda= gcnew MySqlDataAdapter();
sda->SelectCommand=CmdDataBase;
DataTable^dbdataset=gcnew DataTable();
DataColumn^rt_col=gcnew DataColumn();
rt_col->ColumnName = "Ret";
rt_col->DataType=System::Type::GetType("System.Double");
dbdataset->Columns->Add(rt_col);
DataRow^rt_row;
for (int row=0;dbdataset->Rows->Count;row++)
{
rt_row=dbdataset->NewRow();
rt_row["Ret"]=System::Convert::ToDouble(rt_row["Population"])/System::Convert::ToDouble(rt_row["Population"]);
dbdataset->Rows->Add(rt_row);
}
sda->Fill(dbdataset);
BindingSource^bSource=gcnew BindingSource();
bSource->DataSource=dbdataset;
dtGrid->DataSource=bSource;
}
catch(Exception^ex) {
MessageBox::Show(ex->Message);
}
modified 23-Nov-14 20:38pm.
|
|
|
|
|
|
Sure. Also posted i to "general programming" -> c/c++/mfc after realizing it. cheers
|
|
|
|
|
yeah so the man you want to ask is Christan Grauss, hes the man on exactly this sort of thing.
A lovely chap who is so helpful and nice too boot, he'd be more than happy to help you out
cheers
Bryce
MCAD
---
|
|
|
|
|
Thanks Bryce for your prompt feedback. Look forward to getting Christian Grauss' assistance on this issue, after spending a few days to sort it out by myself.
Cheers
|
|
|
|
|
You missed :Evilgrinse: :Evilgrinse: :Evilgrinse: in your post
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpful answers is nice, but saying thanks can be even nicer.
|
|
|
|