Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 681
  • Last Modified:

Convert.ToDouble with negative number on OS X

Hi,

In our Silverlight applicaiton when we uses Convert.ToDouble("-1") on an OS X (10.7) it crashes with:
"Unhandled Error in Silverlight 4 Application [Format_InvalidString]"

Any negative values will crash.

Even if we run a virtual Windows on the mac it will crash with the same error message. On a clean Windows machine it works fine.

Any help appreciated.
0
xlmaster200
Asked:
xlmaster200
  • 3
  • 2
  • 2
  • +1
1 Solution
 
nishant joshiTechnology Development ConsultantCommented:
try to cast if convert not works well.

(Double)"-1";
0
 
Easwaran ParamasivamCommented:
Avoid exception using TryParse method.

if(Double.TryParse("-1") != null )
   Convert.ToDouble("-1");

0
 
Easwaran ParamasivamCommented:
Try to use Double.Parse("-1") then.

0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
xlmaster200Author Commented:
I could try to cast it but I'd really liked to now if anyone can explain why it's not working, is it a bug in the runtime?


0
 
smickleCommented:
I've had similar issues in the past. May not even be isolated to the Mac, but in my case it was the default Culture of the machine that was making stuff explode.

By default, .NET will use the default culture of the machine that is spinning up the runtime, unless you explicity specify which culture to use in your code or configurations. In order for the runtime to know "how" to convert something from some string to a typed double, it uses a format string to determine the conversion pattern.

I ended up having to do stuff like this:
 
// use InvariantCulture
var someDouble = Double.Parse("1234.0",CultureInfo.InvariantCulture);

Open in new window


By using InvariantCulture, the runtime didn't have to use the machine's default culture and possibly change it's conversion pattern. In my code snipped above, the dot in 1234.0 was getting interpretted as a thousands separator in a different culture. So I got the weird FormatException.

This is just a guess as a possibility of why it is happening.

In my case, I was pulling my hair out thinking is was something to do with the difference between a 32-bit system and a 64-bit system. It was just coincidental that the OS's were different, so that lead me down way too many wrong turns to a solution.

Hope this helps.

-Steve
0
 
xlmaster200Author Commented:
Thanks for your answer Steve.
So in other words I can't use Convert.ToDouble (or Convert.ToInt16) anywhere in the code...
I did some test on the client side for a Mac:
string s = "-1";
double d =Convert.ToDouble(s)   - Unhandled Error in Silverlight 4 Application [Format_InvalidString]
double d = Double.Parse(s)  - Unhandled Error in Silverlight 4 Application [Format_InvalidString]
double d = Double.Parse(s,CultureInfo.InvariantCulture) - OK

What culture does not accept "-" before a number? If I try cdbl("-1") in a VBA macro on the Mac it works OK.

It feels no good to change Convert.ToDouble everywhere in the code.
0
 
xlmaster200Author Commented:
I printed out CultureInfo.CurrentCulture.NumberFormat.NegativeSign and found that on the Mac the NegativeSign was a little longer than in Windows... Silly me not thinking of that...

So I go with your suggestion Steve and use InvariantCulture on the client side
0
 
smickleCommented:
Ha, extra long negative sign. That's great.

You might be able to get around changing all the code, and you can explicitly set your desired culture in web.config, if this is an asp.net app. Not sure if this will work off the top of my head, but it could. This would ensure that all your conversions in your code that run within your web app will use a preset culture.

 
<!-- system.web section inside your web.config -->
<globalization culture="en-US"/>

Open in new window


Globalization can be a headache in many sneaky ways though. Especially if you have values stored and retrieved from SQL Server for example. And the SQL Server has a different culture setting than the code that uses it. They must match in order to get predictable results. DateTime formats and conversions are the main ones that get hosed in that scenario due to the different order of the mm/dd/yy structure.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now