从 BigDecimal 输入中获取小数部分
Getting fractional portion of a decimal number from a BigDecimal input
我正在尝试使用 BigDecimal 将小数分成两部分(整数部分和小数部分)。
BigDecimal price1 = BigDecimal.valueOf(300.50);
BigDecimal price2 = BigDecimal.valueOf(300.05);
BigDecimal fractionalPart1 = price1.remainder(BigDecimal.ONE);
BigDecimal fractionalPart2 = price2.remainder(BigDecimal.ONE);
System.out.println(fractionalPart1.movePointRight(price1.scale()).abs().intValue()); // Output is 5
System.out.println(fractionalPart2.movePointRight(price2.scale()).abs().intValue()); // Output is 5
上述两种情况的输出都是 5。如何更正此问题(保留将其转换为字符串的选项)以便正确给出 50 和 5。
好的,这是解决方案。
通过使用 valueOf 并指定双精度值,尾随零被删除。这会影响规模。如果要保留尾随零,则需要使用 BigDecimal 的 String 构造函数版本。
所以改变这些
BigDecimal price1 = BigDecimal.valueOf(300.50);
BigDecimal price2 = BigDecimal.valueOf(300.05);
给这些
BigDecimal price1 = new BigDecimal("300.50");
BigDecimal price2 = new BigDecimal("300.05");
我正在尝试使用 BigDecimal 将小数分成两部分(整数部分和小数部分)。
BigDecimal price1 = BigDecimal.valueOf(300.50);
BigDecimal price2 = BigDecimal.valueOf(300.05);
BigDecimal fractionalPart1 = price1.remainder(BigDecimal.ONE);
BigDecimal fractionalPart2 = price2.remainder(BigDecimal.ONE);
System.out.println(fractionalPart1.movePointRight(price1.scale()).abs().intValue()); // Output is 5
System.out.println(fractionalPart2.movePointRight(price2.scale()).abs().intValue()); // Output is 5
上述两种情况的输出都是 5。如何更正此问题(保留将其转换为字符串的选项)以便正确给出 50 和 5。
好的,这是解决方案。
通过使用 valueOf 并指定双精度值,尾随零被删除。这会影响规模。如果要保留尾随零,则需要使用 BigDecimal 的 String 构造函数版本。
所以改变这些
BigDecimal price1 = BigDecimal.valueOf(300.50);
BigDecimal price2 = BigDecimal.valueOf(300.05);
给这些
BigDecimal price1 = new BigDecimal("300.50");
BigDecimal price2 = new BigDecimal("300.05");