Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确保输入有两个小数位_C# - Fatal编程技术网

C# 确保输入有两个小数位

C# 确保输入有两个小数位,c#,C#,因此,我必须确保输入的价格必须是小数点后2位。例如: 2.00-正确 3.65-正确 77.54-正确 34.12-正确 但是 2-错误 2.8-错误 2.415-错误 99.0-错误 我应该如何检查它?检查inputPrice.Split('..')[1]。长度==2 更新: Console.Write("Input price: "); double price; string inputPrice = Console.ReadLine(); if (double.TryParse(

因此,我必须确保输入的价格必须是小数点后2位。例如:

  • 2.00-正确
  • 3.65-正确
  • 77.54-正确
  • 34.12-正确
但是

  • 2-错误
  • 2.8-错误
  • 2.415-错误
  • 99.0-错误

我应该如何检查它?

检查
inputPrice.Split('..')[1]。长度==2

更新:

Console.Write("Input price: ");
double price;
string inputPrice = Console.ReadLine();
if (double.TryParse(inputPrice, out price))
{
    price = double.Parse(inputPrice);
}
else
{
    Console.WriteLine("Inventory code is invalid!");
}
试试这个:-

Console.Write("Input price: ");
            double price;
            string inputPrice = Console.ReadLine();
            if (double.TryParse(inputPrice, out price) && inputPrice.Split('.').Length == 2 && inputPrice.Split('.')[1].Length == 2)
            {
                price = double.Parse(inputPrice);
            }
            else
            {
                Console.WriteLine("Inventory code is invalid!");
            }
更新

正则表达式检查:-

Console.Write("Input price: ");
double price;
string inputPrice = Console.ReadLine();
var num = Decimal.Parse(inputPrice); //Use tryParse here for safety
if (decimal.Round(num , 2) == num)
{
   //You pass condition
}
else
{
    Console.WriteLine("Inventory code is invalid!");
}

我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。您是否尝试过使用正则表达式验证inputPrice?昨天的问题非常类似,但有一些限制-。如果用户首先输入2检查inputPrice.Split('.')的长度,会发生什么情况?因此我在这里添加了它:if(double.TryParse(inputPrice,OutPrice)&&inputPrice.Split('.')[1].长度==2)。是的,它可以工作,但是如果输入的数字没有“.”那么它会得到一个越界错误。如果字符串不包含“.”那么就使用Try-Catch块?@Mark Miller。整个字符串返回的数字没有小数点仍然通过。00是必需的使用正则表达式怎么样^\d+(\。\d{2})$@MarkMiller检查这个正则表达式。。简单而简短。您不需要执行广泛的拆分和计算。被接受答案中的所有3个条件都将在此处同时出现。想想看,如果你有另一个小数点分隔符会发生什么。“,”例如:)
var regex = new Regex(@"^\d+\.\d{2}?$"); // ^\d+(\.|\,)\d{2}?$ use this incase your dec separator can be comma or decimal.
var flg = regex.IsMatch(inputPrice);
if(flg)
{
\\its a pass
}
else
{
\\failed
}