在Java中,BigDecimal可以通过传递字符串或基本数据类型的值来创建对象。传递字符串时,可以指定精度和舍入模式;传递基本数据类型的值时,将会使用默认的精度和舍入模式。
new BigDecimal("-0.1") 和 new BigDecimal(0.1) 的区别在于传递的值的类型。前者传递了一个字符串,表示一个小数值;后者传递了一个double类型的值,表示一个浮点数。
由于浮点数在计算机中以二进制的形式表示,而二进制无法精确地表示某些十进制小数值,因此使用浮点数进行精确计算时,可能会出现舍入误差。而通过传递字符串来创建BigDecimal对象,则可以避免这种误差,因为BigDecimal会按照十进制的方式来存储和计算数字。
因此,建议在需要精确计算时,使用字符串来创建BigDecimal对象。如果使用浮点数创建BigDecimal对象,则需要特别注意舍入误差的问题。