简体   繁体   中英

Decimal.TryParse - missing separator?

I have strange situation, when I use API. I get object in JSON, which I deserialize. This object contains string property which is parsed to decimal.

To do this I use this code. I live in Poland where decimal separator is ',', so I use replace method.

string input ="160.00"; //value from API

decimal result;
decimal.TryParse(input.Replace('.',','), out result);

From time to time I result is equals 16000!! (I suppose TryParse method delete separator, it not determined). How can I prevent this situation? Can I parse

Numbers should be serialized as InvariantCulture anyway so the InvariantCulture for parsing is a good start. The code serializing the numbers should also be checked whether it follows this rule .

string input ="160.00";
decimal result = decimal.Parse(
    input, 
    System.Globalization.CultureInfo.InvariantCulture);

Not serializing numbers as culture invariant is one of the most common source of problems like it runs on my machine I have no idea why it doesn't on yours... oh you say your system is in a different language oops ;-)

Instead of replacing decimal point character you should be using a proper overload of TryParse method, ie decimal.TryParse(String, NumberStyles, IFormatProvider, Decimal) :

string input ="160.00";
NumberStyles style = NumberStyles.Number;
decimal number = 0;

CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
decimal.TryParse(input, style, culture, out number)

Make sure to specify the correct culture which is suitable for your case.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM