【问题标题】:How to remove the leading 0s and divide the remaining value by 100, use a dot separator between the integer and the decimal part in C#如何去除前导0并将剩余值除以100,在C#中的整数和小数部分之间使用点分隔符
【发布时间】:2022-07-19 20:45:26
【问题描述】:

例如,假设我有一个:

var 值 = "0000000000002022"

我怎样才能得到:20.22

【问题讨论】:

  • var division = float.Parse(value) / 100;,从数学上讲,不管你的非零数前面有多少个零000002 = 2是真的
  • 我总是建议使用 TryParse 以确保字符串值是预期的
  • 谢谢!! @MindSwipe 和 J.Salas

标签: c# .net


【解决方案1】:

从数学上讲,你的数字前面有多少个零并不重要,它们都是一样的,所以0000002 = 2 是正确的。我们可以利用这个事实将我们的字符串简单地解析为一个数字,然后进行除法,但是我们必须要小心我们使用哪种数字类型,因为做(int) 16 / (int) 5会导致3,这显然是'不正确,但整数除法做到了。所以,为了确保我们不会丢失任何精度,我们将使用float

string value = "0000000000002022";
if (float.TryParse(value, out var number))
{
    // Successfully parsed our string to a float
    Console.WriteLine(number / 100);
}
else
{
    // We failed to parse our string to a float :(
    Console.WriteLine($"Could not parse '{value}' to a float");
}

始终使用TryParse,除非您 110% 确定给定的字符串将始终是数字,即使那样,情况也可能(而且将会,这毕竟是软件开发)发生变化。

注意:float 不是无限大,它有一个最大值和最小值,超出这个范围的任何东西都不能用浮点数表示。另外,浮点数也有一个警告:它们不是 100% 准确的,例如 0.1 + 0.2 == 0.3 是错误的,您可以阅读有关主题 here 的更多信息。如果您需要尽可能准确,例如在处理货币时,则可以改用decimal(或者,决定将货币表示为一个整数,代表您所在国家/地区使用的次要货币单位)

【讨论】:

  • 感谢您的回复,但出现以下错误:运算符“/”不能应用于“字符串”和“整数”类型的操作数
  • 如果我们像下面这样转换值就好了:Console.WriteLine(Convert.ToDecimal(value)/ 100);
  • 糟糕,我混淆了变量,而不是value / 100,它应该是number / 100,修复了它。你也可以改用decimal.TryParse
  • 我已经完成了 number / 100 感谢您的确认。
【解决方案2】:

通过使用转换

Int16.Parse(value);
Convert.ToDecimal(int1)/100;

【讨论】:

  • 这将进行整数除法并导致 20 而不是 20.22。
  • @juharr 请通过示例检查所有内容。
  • 所以你在做string -> int -> decimal -> divide。你做string -> decimal -> divide不是更容易吗?
  • 请勿发布代码图片
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多