c# - 如何在 C# 中将小数点的输入限制为仅 1?
问题描述
下面的代码限制了我需要限制的所有内容,但它允许用户输入超过 1 个小数点
if (System.Text.RegularExpressions.Regex.IsMatch(txtOperand2.Text,
"[^0-9],[.],[\b]"))
{
MessageBox.Show("Please enter only numbers.");
txtOperand2.Text = txtOperand2.Text.Remove(txtOperand2.Text.Length - 1);
}
解决方案
根据@DourHighArch的有价值的评论。如果您只是检查特定位数的有效小数,并且您想要一个快速的文化感知解决方案(以及其他可配置性,如数字样式)。
你可以做这样的事情,而不是正则表达式。decimal.TryParse
并通过某种方式检查它有多少小数位。
将数字的字符串表示形式转换为其等效的十进制。返回值指示转换是成功还是失败。
给定
// gets the decimal places by deconstruction
public static int GetDecimalPlaces(decimal d)
=> BitConverter.GetBytes(decimal.GetBits(d)[3])[2];
用法
if (decimal.TryParse(argument, out var d) && GetDecimalPlaces(d) == 1)
Console.WriteLine("You win, play again?");
加入胡椒和盐调味
推荐阅读
- javascript - 使用 JavaScript Papa Parse 将 CSV 文件加载到静态 Python Bokeh Web 应用程序中
- python - 写出一个函数来乘复数
- c++ - 为什么以下代码使用clang而不是gcc编译
- jquery - Jquery对话框模式倒计时
- vba - 将文件下载到不同的路径
- python-3.x - 如何在 Nifi 的虚拟环境中运行具有依赖关系的 python 脚本?
- flutter - 为什么 Flutter Future 不等待
- c# - 为 CLI 实体框架迁移的 DbContext 建立连接字符串时遇到问题
- java - 使用无效 de la 子句 GROUP
- azure - Azure 应用服务 - HTTP 错误 500.30 - ANCM 进程内启动失败