将类型字符串转换为long

时间:2015-12-16 11:31:06

标签: asp.net-mvc

我正在尝试将以下代码中的字符串类型转换为long:

PaymentReceived = String.Format(new CultureInfo("en-IN", true), "{0:n}", t.PaymentReceived),

此处t.PaymentReceived的类型为long,PaymentReceived的类型为字符串,但我希望它的类型为long。

我使用它将PaymentReceived值转换为逗号分隔值。 我想按照我的知识去做,如

PaymentReceived = Convert.ToInt64( String.Format(new CultureInfo("en-IN", true), "{0:n}", t.PaymentReceived))

但错误是其他信息:输入字符串的格式不正确。

所以请帮我解决另一个问题,谢谢。

1 个答案:

答案 0 :(得分:0)

格式化程序n,添加其他非数字字符。对于en-IN文化,这意味着1000之类的数字最终为1,000.00

Convert.ToInt64方法要求字符串是100%数字,包括没有句点,这可能适用于Convert.ToDecimal,但long不是浮点数。因此,重点是,您的字符串格式正确,错误既明显又正确。我不确定你的最终目标是什么,但将长格式转换为格式化字符串然后立即将其转换回很长时间是没有意义的。

假设你只有字符串而你需要将其格式化为long,那么你需要确保它的格式为long。这需要:

  1. 在小数点上拆分,然后在左侧:

    str = str.Split(new[] { '.' })[0];
    
  2. 用空字符串替换任何逗号:

    str = str.Replace(",", "");
    
  3. 假设您知道格式类似于1,000.00。否则,您可能希望使用正则表达式将所有非数字字符替换为空字符串。但是,您仍然需要拆分小数。否则,如果您刚从1,000.00之类的内容中删除了所有非数字字符,那么您最终会得到100000,这是一个比实际字符串数字大100倍的数字。而且,这完全取决于文化。有些文化使用,作为小数分隔符,.和分隔符大量使用。如果您需要处理各种文化,您需要相应调整。