【问题标题】:Find if a decimal is larger than four places查找小数是否大于四位
【发布时间】:2015-11-03 13:50:42
【问题描述】:

我正在尝试验证 C# 中的表单,并且需要确定字符串中的小数位是否大于 4 位。

目前,VB中过去的验证是:

Len(Mid(pAnnualFee, (InstrRev(pAnnualFee, ".") + 1), Len(pAnnualFee))) > 4 

如何以简洁的方式将其转换为 c#,甚至是现在使用 C# 中的 InstrRev 和 mid 等价物的方式?

【问题讨论】:

  • 可以理解您只想转换该代码,但我会放弃它,尤其是在使用金钱的情况下。它是特定于文化的,所以如果有人从使用逗号作为小数分隔符的文化中使用它,那么这个函数将失败。例如,150,20 美元与 150.20 美元相同,具体取决于文化。

标签: c# string vb6 vb6-migration


【解决方案1】:

你可以这样试试:

decimal d = decimal.Parse(pReturn);
if (Decimal.Round(d, 4) != d)

【讨论】:

  • 这行不通,因为 pReturn 显然是一个字符串,并且没有将字符串作为第一个参数的 Decimal.Round 重载。
  • @Joe:- 没看到 pReturn 是字符串。更新了我的答案!
  • 是的,谢谢,但我不能只是四舍五入。我需要验证是否正确输入了费用。如果该费用四舍五入,则可能不一样。
  • @RahulTripathi 哦,是的。我误会了,我以为你的意思是明确地四舍五入。
  • @RahulTripathi 谢谢。我同意了,这很简单,其他人也能理解逻辑在做什么。我所要做的就是将它包装在另一个 if 语句中,该语句执行 tryparse 以确保只有数字而不是字母。非常感谢。
【解决方案2】:

我可能会使用@fix_likes_coding 的答案中的解决方案。

但是,虽然 Decimal 结构没有获取小数位数的方法,但您可以调用 Decimal.GetBits 来提取二进制表示,然后使用整数值和小数位数来计算小数位数。

这可能比格式化为字符串更快,尽管您必须处理大量小数才能注意到差异。

尝试这样的事情(例如):

decimal argument = 123.456m;
int count = BitConverter.GetBytes(decimal.GetBits(argument)[3])[2];

然后就是:

if(count>4)
{
//your code
}

【讨论】:

  • [3] 和 [2] 有什么作用?
  • @user1093111 没问题 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
相关资源
最近更新 更多