使用 Java BigDecimal 作为 15 位精度数字(小数位数为 2)

Using Java BigDecimal for a 15 precision digit (scale of 2)

我找到了部分答案 here,但我已经知道了。所以我决定 post 一个新问题。

我正在尝试将 HTTP 请求参数字符串转换为 15 精度 Java BigDecimal 数字(缩放比例为 2)。例如,

String x = request.getParameter("seqNo"); /* e.g. 12345678910111213141516.17181920 whatever */
// I want to convert x so that it has a precision of 15 and scale of 2 i.e. 111213141516.17.

我不关心四舍五入。它是参考数字的一种形式,与四舍五入无关。我知道可以通过使用重载 setScale(int) 方法来设置缩放比例,该方法将 return 缩放(截断?)BigDecimal。但是如何确保精度设置正确?

改用子串怎么样?反正也不是真正的数字。

int pos = x.indexOf('.');
String y = x.substring(pos - 12, pos + 3);

如果你真的疯狂到尝试将其处理为数字(四舍五入的冲突和差异迟早会打破你的脖子!),你可以这样做。

double v = Double.parseDouble(y); // REALLY REALLY REALLY NOT RECOMMENDED.

但是这是一个非常非常的坏主意。不要将 不是 数字的内容塞入数字列中。下周,你会得到带有两个点的数字,它会以各种可能的方式中断。

如果您不需要进行数学计算,那么将这样的字段视为VARCHARTEXT是完全可以接受的。因为它就是这样:一个字符序列。不是数字。

事实上,我强烈建议将整数存储为 VARCHAR。它是一个唯一标识符,而不是用于计算的数学数字。