Problem to export double values to csv

 

Hello,

When I export some values to CSV files, by the function FileWrite(), when I convert double numbers to string, in some cases they loss the point (.), and show numbers without any standard format.

Manly for the BID and SWAP values, the convertion from double for string is not working properly.

Can anybody help me?

Thks


   FileWrite(FileHandle, str);
   int total = SymbolsTotal(false);
   for (int sym = 0; sym < total; sym++)
   {
      string symbol = SymbolName(sym, false);     
      str = symbol
            +","+ SymbolInfoString(symbol, SYMBOL_DESCRIPTION)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_BID)
            +","+(string) SymbolInfoInteger(symbol, SYMBOL_DIGITS)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_POINT)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_MARGIN_HEDGED)
            +","+EnumToString( (ENUM_SYMBOL_SWAP_MODE)SymbolInfoInteger(symbol, SYMBOL_SWAP_MODE))
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_SWAP_LONG)
            +","+(string) SymbolInfoDouble(symbol, SYMBOL_SWAP_SHORT)
            +","+EnumToString( (ENUM_DAY_OF_WEEK)SymbolInfoInteger(symbol, SYMBOL_SWAP_ROLLOVER3DAYS))
            +","+(string) SymbolInfoInteger(symbol, SYMBOL_SPREAD_FLOAT)
            +","+(string) SymbolInfoInteger(symbol, SYMBOL_SPREAD)
            +","+ SymbolInfoString(symbol, SYMBOL_CURRENCY_BASE)
            +","+ SymbolInfoString(symbol, SYMBOL_CURRENCY_PROFIT)
            +","+ SymbolInfoString(symbol, SYMBOL_CURRENCY_MARGIN)
            +","+EnumToString( (ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE))
            +","+EnumToString( (ENUM_SYMBOL_CALC_MODE)SymbolInfoInteger(symbol, SYMBOL_TRADE_CALC_MODE))
            +","+ TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS)
            ;
            
      FileWrite(FileHandle, str);
   }
   
   FileClose(FileHandle);
 

use DoubleToString:

int digits=SymbolInfoInteger(symbol, SYMBOL_DIGITS);
string bidstr=DoubleToString(SymbolInfoDouble(symbol, SYMBOL_BID),digits);
 

Thank you. I tried this before asking, and it did not work.

 
Daniel Arges:

Thank you. I tried this before asking, and it did not work.

But it should, according to its specification. Show your code if it's not working.
 
Daniel Arges:

I use StringFormat() for all my string formatting needs.

// typed from memory; not tested
str = StringFormat("%s,%.5f,%.5f", symbol, SymbolInfoDouble(symbol, SYMBOL_BID), SymbolInfoDouble(symbol, SYMBOL_ASK));

@lippmaje is correct that DoubleToString() should work; however, in tens of thousands of lines of code, I think I have used DoubleToString() only once.

Reason: