如何在不丢失小数部分的情况下将十进制字符串转为Java Integer类型
解决方案:将十进制字符串转成Integer并保留小数部分
由于无法修改Integer字段,核心思路是把小数数值放大为整数存储(比如两位小数就乘以100),后续需要展示时再还原为小数格式。以下是两种可靠实现方式:
方法一:使用BigDecimal处理(推荐,避免浮点精度问题)
BigDecimal能精准处理十进制运算,适合需要四舍五入或确保精度的场景:
import java.math.BigDecimal; import java.math.RoundingMode; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class NumberFormatTest { private static final Logger log = LoggerFactory.getLogger(NumberFormatTest.class); @Test public void testDecimalToInteger() { String stringValue = "3.33"; // 解析字符串为BigDecimal BigDecimal decimalValue = new BigDecimal(stringValue); // 保留两位小数(四舍五入)后乘以100,转为整数 BigDecimal scaledValue = decimalValue.setScale(2, RoundingMode.HALF_UP) .multiply(new BigDecimal(100)); // 转为Integer(若数值超出Integer范围,需改用long或捕获异常) int storedValue = scaledValue.intValueExact(); log.info("存储的Integer值: {}", storedValue); // 输出333 // 还原为原小数格式展示 log.info("还原后的小数: {:.2f}", storedValue / 100.0); // 输出3.33 } }
方法二:字符串分割处理(适合固定两位小数的场景)
如果确定输入字符串都是两位小数,可直接分割拼接:
import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class NumberFormatTest { private static final Logger log = LoggerFactory.getLogger(NumberFormatTest.class); @Test public void testStringSplitToInteger() { String stringValue = "33.44"; // 按小数点分割字符串 String[] parts = stringValue.split("\\."); String integerPart = parts[0]; // 处理小数部分:不足两位补0,超过两位截断 String decimalPart = parts.length > 1 ? parts[1] : "00"; decimalPart = decimalPart.length() > 2 ? decimalPart.substring(0, 2) : String.format("%-2s", decimalPart).replace(' ', '0'); // 拼接整数部分和小数部分,转为Integer int storedValue = Integer.parseInt(integerPart + decimalPart); log.info("存储的Integer值: {}", storedValue); // 输出3344 // 还原为原小数格式展示 log.info("还原后的小数: {:.2f}", storedValue / 100.0); // 输出33.44 } }
注意事项
- Integer范围限制:Integer的取值范围是
-2147483648到2147483647,如果原字符串乘以100后超出这个范围,会抛出ArithmeticException(使用intValueExact()时)或溢出(使用intValue()时),需提前确认数值范围。 - 精度处理:如果输入小数位数不固定,建议用BigDecimal的方式控制舍入规则(如
RoundingMode.DOWN截断、RoundingMode.HALF_UP四舍五入)。
内容的提问来源于stack exchange,提问作者Hari Sheen
相关产品推荐
相关产品推荐

