我有一个字符串 "246246.246",我想将其传递给IConvertable接口的ToInt16、ToInt32、ToInt64方法。如何将带有小数点的字符串解析为整数?
这是一种解决方案,但是否有更好的解决方案?
string value = "34690.42724";
Convert.ToInt64(Convert.ToDouble(value));
我有一个字符串 "246246.246",我想将其传递给IConvertable接口的ToInt16、ToInt32、ToInt64方法。如何将带有小数点的字符串解析为整数?
这是一种解决方案,但是否有更好的解决方案?
string value = "34690.42724";
Convert.ToInt64(Convert.ToDouble(value));
要进行折扣舍入,可以这样做:
Convert.ToInt64(Math.Floor(Convert.ToDouble(value)));
如果你需要四舍五入,则可以将Math.Floor
替换为Math.Round
。
编辑:因为你在评论中提到了你会进行四舍五入:
Convert.ToInt64(Math.Round(Convert.ToDouble(value)));
如果您需要考虑本地化/全球化,那么如@xls所说,您应该在转换中应用CultureInfo。
编辑2:使用字符串函数的替代方法(在我看来不太优雅 - 也许可以使用谓词函数使其更优雅):Convert.ToInt64(value.Substring(0, value.IndexOf('.') > 0 ? value.IndexOf('.') : value.Length));
using System;
应该可以解决问题。 - Joel Etherton你不需要对值进行四舍五入,因为ToInt64(double)已经返回了四舍五入的版本。
string value = "246246.246";
Convert.ToInt64(Convert.ToDouble(value));
Convert.ToInt64(Convert.ToDouble("15.5"))
返回16。它进行四舍五入而不是截断。 - deepee1如果您真的关心准确性而不是速度,那么十进制类型会更好。
(long)Math.Round(decimal.Parse(value));
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;
}
}
public static void Main(string[] args)
{
decimal amount = 50.567890m;
int koboValue = 0;
String[] values = amount.ToString("0.##").Split('.');
int wholeNumber = Convert.ToInt32(values[0]);
if(values.Count() > 1){
koboValue = Convert.ToInt32(string.Join(string.Empty,values));
}else{
koboValue = wholeNumber * 100;
}
Console.WriteLine(koboValue);
}