【问题标题】:Issue with parsing and multiplying by 1000 in order to get ms instead of seconds解析和乘以 1000 以获得毫秒而不是秒的问题
【发布时间】:2018-07-22 20:05:48
【问题描述】:

提交表单后出现以下错误:

输入字符串的格式不正确。

我的代码:

  Decimal intervalStart = Decimal.Parse(IntervalTime.Text);
  Decimal intervalTotal = intervalStart * 1000;
  string interval = intervalTotal.ToString();

我试图得到整数而不是小数的总数,但小数对于得到整数(乘以 1000 时)至关重要。 例如,我的小应用程序读取一个视频文件并将总秒数放入“IntervalTime.Text”框中。然后将其转换为毫秒并成为整数。

视频:87.524 秒。将它乘以 1000,得到 87524。

【问题讨论】:

  • 在我看来,您实际上并没有在文本框中输入有效的 decimal 值。
  • 您可以尝试使用float(或Single)而不是decimal
  • 请分享IntervalTime.Text的值。
  • 我刚刚在线程上发布了它的图像。谢谢。
  • 您的操作系统上的小数点分隔符是什么?

标签: c# asp.net parsing int decimal


【解决方案1】:

Decimal.Parse(String) 解析这种格式的数字:

[ws][sign][digits,]digits[.fractional-digits][ws]

小心点

  1. , 是特定于文化的千位分隔符。
  2. . 是特定于文化的小数点符号

这意味着 87,524 和 87.524 都可以是有效的十进制数字字符串,具体取决于系统文化。

【讨论】:

    【解决方案2】:

    这不起作用:

    string b = "87.524";
    Decimal intervalStart2 = Decimal.Parse(a);
    

    但这确实:

    string a = "87,524";
    Decimal intervalStart1 = Decimal.Parse(a);
    

    分隔符有问题。

    一种可能的解决方案可能是:

    string b = "87.524";
    b = b.Replace(".", ",");
    Decimal intervalStart = Decimal.Parse(b);
    

    同样在这个question 中展示了如何自己定义分隔符:

    decimal.Parse("87.524", new NumberFormatInfo() { NumberDecimalSeparator = "." })
    

    另一种方式是定义具体的CultureInfo

    decimal.Parse("87.524", new CultureInfo("en-US"));
    

    【讨论】:

    • 谢谢,您提供的最后两个解决方案帮助解决了这个问题。我将在上面的原始帖子中发布最终代码/答案。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多