假设我们有两个文本字段:
第一个文本字段 - 用户输入金额 - 可以是任意数量到两位小数(3456.23,555555.5,23.44等)
第二个文本字段 - 用户输入一个数量,将其平均分配为(2,7,1等)
我们如何检查此计算的结果是否是精确分割(到两位小数)?例如。
54.2 / 2 = 27.1 (exact split) returns true
61.05 / 2 = 30.525 (not exact split) returns false
答案 0 :(得分:2)
您可以将除法结果乘以100并使用模数来检查它是否具有非零小数部分。
if (((number*100) % 1) == 0) {
// exact
} else {
// not exact
}
答案 1 :(得分:2)
您所询问的内容相当于“number*100
可被split
整除”。您可以将BigDecimal
乘以100,转换为BigInteger
,然后使用mod
进行检查。
答案 2 :(得分:2)
将值输入乘以100,以分数为模,并检查零余数:
(54.20 * 100) % 2 = 0
(61.05 * 100) % 2 = 1
答案 3 :(得分:2)
您可以将答案作为字符串获取,然后通过正则表达式[.]
将其拆分为标记,并检查尾随小数的长度:
String decimals = Float.toString(f);
String[] tokens = decimals.split("[.]");
return tokens[1].length() == 2;
答案 4 :(得分:1)
您可以使用divide()
的{{1}}方法:
BigDecimal
来自public static boolean isExactSplit (BigDecimal number, int nbParts) {
try {
number.divide(new BigDecimal(nbParts), 2, RoundingMode.UNNECESSARY);
return true;
} catch (ArithmeticException roundingError) {
return false;
}
}
javadoc:
<强>抛出:强>
ArithmeticException - 如果divisor == 0,或者roundingMode == RoundingMode.UNNECESSARY和this.scale()不足以完全表示除法的结果。
你可以这样使用它:
BigDecimal