如何在Java中检查double变量是否超过两位小数?

时间:2015-09-11 20:48:41

标签: java decimal

我认为我可以通过以下方式轻松完成此任务:

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位小数就好了。

任何提示都表示赞赏!谢谢!

编辑:感谢您的所有快速评论!这解决了我的问题,我真的很感激为什么它不能工作的额外信息。谢谢!

4 个答案:

答案 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

}