Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert string decimal to int

Tags:

c#

parsing

I have a string "246246.246" that I'd like to pass to the IConvertable interface, ToInt16, ToInt32, ToIn64. What is the best way to parse a string with decimal places to an integer?

This is a solution, but is there a better solution?

string value = "34690.42724"; Convert.ToInt64(Convert.ToDouble(value)); 
like image 339
Mike Avatar asked Feb 12 '11 01:02

Mike


People also ask

How do you convert from decimal to int?

For a string to int conversion, use the Convert. ToInt32 method. For converting a string “number” to decimal, use the ToDecimal, ToDouble etc.

How do you convert decimal to int in Python?

In Python, you can simply use the bin() function to convert from a decimal value to its corresponding binary value. And similarly, the int() function to convert a binary to its decimal value. The int() function takes as second argument the base of the number to be converted, which is 2 in case of binary numbers.


2 Answers

You should not have to Round the value as ToInt64(double) returns the rounded version already

        string value = "246246.246";         Convert.ToInt64(Convert.ToDouble(value)); 
like image 43
deepee1 Avatar answered Oct 02 '22 06:10

deepee1


To do this discounting rounding you could do:

Convert.ToInt64(Math.Floor(Convert.ToDouble(value))); 

If you need to round you could replace Math.Floor with Math.Round.

Edit: Since you mentioned in a comment that you'll be rounding:

Convert.ToInt64(Math.Round(Convert.ToDouble(value))); 

If you have to worry about localization/globalization then as @xls said you should apply a CultureInfo in the conversions.

Edit 2: Alternative method using a string function (not terribly elegant IMO - maybe it could be elegantized with a predicate function):

Convert.ToInt64(value.Substring(0, value.IndexOf('.') > 0 ? value.IndexOf('.') : value.Length)); 
like image 190
Joel Etherton Avatar answered Oct 02 '22 07:10

Joel Etherton