我认为我可以通过以下方式轻松完成此任务:
double numInput;
numInput = Double.parseDouble(inputTxtField.getText());
if ((numInput * 100) % 1 != 0) {
// do something
}
但是,我得到了各种奇怪的测试用例,例如:
假: 2.11, 2.5, 2.6
真: 2.22,2.3,2.2
我刚刚开始编程,所以这可能是一个愚蠢的傻瓜,但我认为将双倍乘以100,然后在除以1时检查余数是否有效。目的是防止某人输入超过两位小数的数字。小于或等于2位小数就好了。
任何提示都表示赞赏!谢谢!
编辑:感谢您的所有快速评论!这解决了我的问题,我真的很感激为什么它不能工作的额外信息。谢谢!答案 0 :(得分:8)
转换为BigDecimal
并检查scale
:
double[] values = { 2.11, 2.5, 2.6, 2.22, 2.3, 2.2, 3.141 };
for (double value : values) {
boolean fail = (BigDecimal.valueOf(value).scale() > 2);
System.out.println(value + " " + (fail ? "Fail" : "Pass"));
}
输出
2.11 Pass
2.5 Pass
2.6 Pass
2.22 Pass
2.3 Pass
2.2 Pass
3.141 Fail
答案 1 :(得分:3)
尝试
if(inputTxtField.getText().indexOf(".") >= 0 && inputTxtField.getText().indexOf(".") < inputTxtField.getText().length() - 2){
如果原始true
中的小数点位于String
中的最后2个字符之前,则为String
。
答案 2 :(得分:3)
这不起作用。计算机以二进制工作。请记住,1/3等于0.33333333,无限数字。计算机只能存储有限数量的二进制数字,因此它会在一些数字之后切换。这意味着1/3 * 3!= 1.对于二进制中的任何数字都相同,这意味着1/100 * 100不是1,因为您只丢失了一些小数位。使用double你将永远无法使用standard =或!=运算符,因为它们在大多数情况下都不会起作用。
在你的情况下解决这个问题的最好方法是直接使用String并查看'。'的位置。字符。
答案 3 :(得分:0)
尝试使用compareTo
类
Double
Double numInput;
Double foo = numInput*100;
foo = foo - foo.intValue();
if (foo.compareTo(0D) > 0 ) {
//has more than two digits
}