使用Java BigDecimal获得15个精度数字(比例为2)

时间:2015-04-30 15:14:34

标签: java precision bigdecimal

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

我正在尝试将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)方法来设置缩放,该方法将返回缩放(Truncated?)BigDecimal。但是如何确保精确度设置正确?

1 个答案:

答案 0 :(得分:1)

如何使用子字符串代替?无论如何,这不是一个真正的数字。

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

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

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

这是非常 非常坏主意。不要将某些内容挤入到数字的数字列中。下周,你将得到两个点的数字,它会以各种可能的方式打破。

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

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