#java#Map取值的时候bigdecimal类型的怎么转换为String类型的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#java#Map取值的时候bigdecimal类型的怎么转换为String类型的相关的知识,希望对你有一定的参考价值。

大家好,今天我提取一个ID的时候,说bigdecimal类型不能转换为String类型,然后我就用了cmap.get("ID").toString(),但是还是说bigdecimal类型不能转换为String类型,然后我就强转(String)cmap.get("ID"),还是报相同的错误,但是最后我用String.valueOf(cmap.get("ID"),它就不报错了,哪位大神能给我排难解惑下么?这是什么原因呢?
for(Map<String,String> cmap :result)
cmap.put("serial", String.valueOf(cmap.get("ID"))) ;
cmap.put("name", cmap.get("TYPE")) ;

Bigdecimal 下有此方法 floatValue(),转换成float类型,然后再转换成String。比如:
b 是 Bigdecimal的一个实例。 那么 b.floatValue() + "", 这个就是String类型。

sorry,我没看完整你的问题,map中的get()方法返回map中存放的value,根据你用的String.valueOf(cmap.get("ID")方法,你查文档,这个方法返回值就是String类型。而你直接进行强转,就相当于有一个动物这个类转换成植物类。这两个类毫不相干,是无法进行强转的,而你使用这个方法cmap.get("ID").toString(),当value是一个基本数据类型的时候,是没有toString()方法的。 你去查文档,String.valueOf( int i ),String.valueOf( float f) ,String.valueOf( Object o).....所以valueOf方法能成功
参考技术A BigDecimal totalMoney =project.getTotalMoney();
BigDecimal totalPayamount = paymentrel.getPayamount();

totalMoney.toString();
totalPayamount.toString();
或者
String.valueOf(totalMoney);
String.valueOf(totalPayamount);
参考技术B 是long型的,((Long)cmp.get("id")).tostring(); 大概这样,没验证

freeMark的Map取值问题

https://www.jianshu.com/p/289e15a49f56

FreeMark除了基本数据类型之外,还有类似于java对象的类型叫容器,主要分为以下三种:

- 哈希表
- 序列
- 集

哈希表从java角度来说,可以是普通的对象,也可以是HashMap。当是普通的对象的时候,直接Object.value这种形式调用即可,但当是java里面的HashMap的时候,尤其数据量比较多的时候,就必须按照键值对的形式来获取数据:

myMap[myKey]

但是,这里有一个比较隐含的条件就是:myKey必须是字符串,否则freeMark就会自动的将非字符串的键转换为字符串,然后再获取myKey对应的value,

文档里是这么描述原因的:

FreeMarker 模板语言( FTL)的“哈希表”类型和 Java 的 Map 是不同的。 FTL 的哈希表也是一个关联数组,但是它仅仅使用字符串的键。这是因为它是为子变量而引的(比如user.password 中的 password,它和 user["password"]是相同的),而变量名是字符串。

这里隐式的自动转换会带来一个严重的问题,比如java中map是这么定义的:

Map<Long, Object> myMap = new HashMap<~>();

此时,在freeMark中写myMap(myLong)就会报错,因为隐式转换为字符形式的时候,会自动加分隔符 , ,比如123345就会被转换为"123,45",从而导致错误的myKey的产生,获取不到value而报错。

解决办法,调用c方法转换:

myMap(myLong?c)

通常来说,也是不推荐自动隐式转换的。比如,如果你在Map中使用Integer类型的键,那么你就必须书写$myMap.get(123?int)这样子。



作者:杨比轩
链接:https://www.jianshu.com/p/289e15a49f56
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

以上是关于#java#Map取值的时候bigdecimal类型的怎么转换为String类型的的主要内容,如果未能解决你的问题,请参考以下文章

利用stream对list集合中的bigdecimal进行分组求和,均值,最大值,最小值

Java复习-Bigdecimal类

java之BigDecimal类

java中BigDecimal在前端获取数据的时候精度丢失

java.math.BigDecimal类multiply的使用

freeMark的Map取值问题