如果数字平分?

时间:2014-02-23 02:41:56

标签: java floating-point

假设我们有两个文本字段:

第一个文本字段 - 用户输入金额 - 可以是任意数量到两位小数(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

5 个答案:

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