我正在使用 jdbc 连接查询数据库:
List<Map<String, Object>> rows = jdbcTemplate.queryForList(SELECT_QUERY);
for(Map row : rows) {
Results result = new Results();
result.setResultValueDouble((Double)row.get("AMOUNT"));
//add the data object to the list
resultList.add(result);
}
Run Code Online (Sandbox Code Playgroud)
但是,我查询的对象是 BigDecimal,我想将其转换为普通双精度。使用强制转换不起作用并给我一个ClassCastException.
有什么建议如何正确地投射这个对象吗?
感谢您的回复!
我是 Android 新手,所以请解释一下,如何在 API 级别 16 中使用 BigDecimal,因为使用这一行:
BigDecimal currentNumber = new BigDecimal(String "0.0");
Run Code Online (Sandbox Code Playgroud)
导致错误,Call 需要 api 级别 24。
我有两个double计数器,我根据某些标准递增.计数器将1或0.01递增,其结果归纳在一起的序列号1.00,1.01,1.02等,等我得到的结果1.01999999999或者1.111111111111,预期的状况:由于性质double.
我正在尝试使用BigDecimal,尽管Java文档指出
BigDecimal(double val)
Translates a double into a BigDecimal which is the exact decimal representation of the double's binary floating-point value.
Run Code Online (Sandbox Code Playgroud)
我无法让代码工作.
....
if (condition1) {
indexNo = indexNo + 1;
subIndexNo = .00;
} else
if (condition2) {
subIndexNo = subIndexNo + .01;
}
recNo = indexNo + subIndexNo;
BigDecimal record = BigDecimal(double recNo);
Run Code Online (Sandbox Code Playgroud)
来自编译器的错误消息
C:\pathtojava\sync\java\bin>javac ParseWhiData.java
ParseWhiData.java:97: error: '.class' expected
BigDecimal …Run Code Online (Sandbox Code Playgroud) 我需要乘以radius*radius*pi找到圆的确切区域,但我写下的代码不起作用.它是不断给予双重不能被解除引用的错误...
错误
----jGRASP exec: javac -g Circle.java
Circle.java:7: error: double cannot be dereferenced
BigDecimal area = radius.multiply(pi);
^
1 error
Run Code Online (Sandbox Code Playgroud)
码
import java.math.*;
public class Circle {
public BigDecimal findArea(double radius){
double pi = 3.14159;
radius = radius * radius;
BigDecimal bd = new BigDecimal("1");
BigDecimal area = pi.multiply(radius);
return area;
}
}
Run Code Online (Sandbox Code Playgroud) 当我尝试使用以下方法划分 BigDecimals 时:
divide(divisor, RoundingMode.HALF_UP)
它返回 0
但是,如果我没有这样的舍入模式就这样做:
divide(divisor)
我得到一个 ArithmeticException
我不在乎数字是否不是精确的十进制表示。如何在不得到 0 或异常的情况下划分 BigDecimals?
我正在尝试专门使用这个值
new BigDecimal("23.025").setScale(2, RoundingMode.HALF_EVEN);
输出为23.02,但应为23.03.这是一个错误吗?
只是为了好奇DecimalFormat("#####0,00");也行不通
还有其他建议吗?
可能重复:
如何在Java中将数字舍入到n个小数位
我有像"1234.9678"这样的Double值.我想只返回一个小数,没有舍入或上限.
我用这种方式,但它返回"1234.96"
public double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d)); }
Run Code Online (Sandbox Code Playgroud)
我只想要"1234.9",
我甚至用这种方式......但没有运气......任何人都可以帮忙吗?
double d = 1234.9678;
int decimalPlace = 1;
BigDecimal bd = new BigDecimal( Double.toString(d) );
bd = bd.setScale( decimalPlace, BigDecimal.ROUND_HALF_UP );
System.out.println( bd.doubleValue() );
Run Code Online (Sandbox Code Playgroud)