Convert string decimal to int

后端 未结 4 2003
-上瘾入骨i
-上瘾入骨i 2020-12-09 15:30

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

相关标签:
4条回答
  • 2020-12-09 15:47

    Assuming this string comes from user input, you probably want to catch number styling. Run it through a reusable function like so...

    int? ConvertToNumber(string value)
    {
       if (value == string.Empty) return null;
    
       try
       {
           var dec = decimal.Parse(value,
               NumberStyles.AllowDecimalPoint |
               NumberStyles.Number |
               NumberStyles.AllowThousands);
    
           return (int)Math.Round(dec);
       }
       catch (Exception ex)
       {
           Console.WriteLine("Please input a number.");
           return null;
       }
    }
    
    0 讨论(0)
  • 2020-12-09 15:52

    If you are really worry about accuracy but not about speed then decimal type would be better.

    (long)Math.Round(decimal.Parse(value));
    
    0 讨论(0)
  • 2020-12-09 15:55

    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));
    
    0 讨论(0)
  • 2020-12-09 15:57

    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));
    
    0 讨论(0)
提交回复
热议问题