Java 如何以一定的精度读取双精度值
如何以一定的精度从字符串中读取双精度值(例如4)假设字符串包含类似10.1234的内容使用此您可以执行以下操作 数学整数*100/100 以获得精度,但由于浮点数和双精度的内部表示,这可能不会达到您想要的效果Java 如何以一定的精度读取双精度值,java,Java,如何以一定的精度从字符串中读取双精度值(例如4)假设字符串包含类似10.1234的内容使用此您可以执行以下操作 数学整数*100/100 以获得精度,但由于浮点数和双精度的内部表示,这可能不会达到您想要的效果 如果在小数点之后确实需要使用固定位数,请考虑使用BigDigMal.< /P> 对于格式化输出,可以使用中描述的类似C的printf功能。它并不漂亮,但很实用。我假设您的字符串也包含字母。 System.out.println(new Double(new BigDecimal("10.1
如果在小数点之后确实需要使用固定位数,请考虑使用BigDigMal.< /P>
对于格式化输出,可以使用中描述的类似C的printf功能。它并不漂亮,但很实用。我假设您的字符串也包含字母。
System.out.println(new Double(new BigDecimal("10.123456789").
setScale(4, BigDecimal.ROUND_DOWN). // choose precision and specify rounding policy
doubleValue()
));
>> run:
10.1234
您可以首先从字符串中解析数字:
String numberString = ...
int precision = ...
int index = numberString.indexOf(".");
numberString = numberString.substring(0, index+precision+1); // Maybe without "+1"
Double number = Double.valueOf(numberString);
可以使用正则表达式将字符串截断为小数点后最多4位,然后使用Double.valueOf 这张照片是:
12 12 12.0
12. 12. 12.0
12.3 12.3 12.3
12.34 12.34 12.34
12.345 12.345 12.345
12.3456 12.3456 12.3456
12.34567 12.3456 12.3456
-123.45678 -123.4567 -123.4567
1.23456.789.0 1.2345 1.2345
正则表达式的工作原理
它捕获一个文本,后跟最多四个数字\d{4},并将其转换为\1。它还将匹配后面的所有内容。*,并将整个内容替换为对捕获内容的$1反向引用
与简单的indexOf方法相比,这种方法的优点是,即使没有4位数字,或者甚至没有小数点,它也可以工作,而无需特殊处理
另见
如果需要十进制精度,则double是错误的目标类型,因为它是一种二进制格式,无法准确表示大多数十进制整数。这个双精度值实际上会四舍五入到10.123399999999976 相反,请始终使用BigDecimal,或者在读取和操作数据时忘记运行,只在打印结果时对其进行四舍五入
有关详细信息。或者您可以使用BigDecimal。当您有一个正确的十进制类型时,没有很好的理由在cents hack中使用计算。
12 12 12.0
12. 12. 12.0
12.3 12.3 12.3
12.34 12.34 12.34
12.345 12.345 12.345
12.3456 12.3456 12.3456
12.34567 12.3456 12.3456
-123.45678 -123.4567 -123.4567
1.23456.789.0 1.2345 1.2345