在 C# 中针对浮点数验证整数值
Posted
技术标签:
【中文标题】在 C# 中针对浮点数验证整数值【英文标题】:Validating an integer value against float in C# 【发布时间】:2021-12-21 07:19:41 【问题描述】:我有一个文本框,用户可以在其中输入双点数。例如:-
1.00
1.0000
1.23
1.000000
等,可以从用户界面输入双数。
在我的 C# 代码中,我必须验证用户是否输入了 1。
1.00
1.0000
1.000000
都被认为是 1 并且通过了验证。 我正在考虑转换为 Int
public bool Validate(double number)
int v = Convert.ToInt32(number)
if(v == 1)
return true;
但问题是我会失去精度,1.00 和 1.001 都将导致 1 并且错误地 1.001 将返回为我不需要的 true。 如何检查用户是否在 C# 的 UI 中输入了 1.00,1.000,...等?
编辑: 对于 1.23、1.001 等数字,我不需要 true
【问题讨论】:
这能回答你的问题吗? Floating point comparison functions for C# 我一定是遗漏了什么——为什么不只是return (number == 1)
?
请注意,用户仍然可以输入诸如“1.0000000000000001”之类的内容,无论如何它将等于 1,因为它将(使用double.Parse
)解析为 1(双精度表示这样的值)。
【参考方案1】:
将值与 1.0 进行比较应该可以解决问题:
bool isOne = val == 1.0;
(浮点数的等式比较可能会很棘手,但这个比较符合您的预期。)
编辑:使用 1
代替 1.0
也可以,正如 Matthew Watson 在 cmets 中所建议的那样。
【讨论】:
【参考方案2】:你可以使用decimal
数据类型
public bool Validate(double number)
var num = decimal.Parse(number.ToString());
if(num == 1)
return true;
return false;
【讨论】:
它会为1.23
返回“true”吗? =)
没有。它只会为 1.0、1.00000、1.0000000000 或 1 返回 true
OP 需要它对于 1.23
来说是真的
将双精度转换为十进制有什么意义,虽然是一个字符串?
@VA1267 你的问题说明了什么 - " 例如:- 1.00 1.0000 1.23 1.000000 都是有效的。" 我清楚地看到1.23
那里以上是关于在 C# 中针对浮点数验证整数值的主要内容,如果未能解决你的问题,请参考以下文章