当前位置: 首页 > 知识库问答 >
问题:

BigDecimal以字符串形式存储在spring数据MongoDB中

别旻
2023-03-14
@Document(collection = "loanDetails")
class LoanDetails {
    @Transient
    public static final String COLLECTION_NAME = "loanDetails
    @Id
    String id

    String loanId
    String loanUUID
    String loanStatus
    Date loanDateCreated
    Date loanLastUpdated
    BigDecimal loanAmount //Stores in String
}

每当我在这个集合中保存一些数据时,我就声明了一个类LoanDetails和一个包含BigDecimal类型loanAmount的字段

  1. 它以字符串形式存储在mongo db数据库中

我试图在loanAmount字段上添加注释

@Field(targetType = Decimal128) // This also throws error does not contain targetType attribute attached screenshot for the same
BigDecimal loanAmount

共有1个答案

林浩漫
2023-03-14

您可能需要删除/迁移已经创建的loanDetails,因为loanAmount字段被持久化为String

通过将@Field(targetType=FieldType.DECIMAL128)添加到loanAmount字段中,它应该可以工作。

import org.springframework.data.mongodb.core.mapping.FieldType;
...

@Field(targetType = FieldType.DECIMAL128)
BigDecimal loanAmount;
...

public LoanDetails() {
    loanAmount = new BigDecimal(21.905334472656250);
}
...
 
template.save(loan);

template.find(new Query(), org.bson.Document.class, "loanDetails").forEach(l -> {
    System.out.println(l.get("loanAmount").getClass().getName() + " " + l.get("loanAmount"));   
});
//org.bson.types.Decimal128 21.90533447265625
    
template.findAll(LoanDetails.class).forEach(l -> {
    System.out.println(l.loanAmount.getClass().getName() + " " + l.loanAmount); 
});
//java.math.BigDecimal 21.90533447265625

如果得到转换为小数128,则需要对XXX进行不精确的四舍五入

注意:Decimal128类型最多只支持34位精度。(通常情况下,“精度”表示数字总数,而“小数位数”表示小数位数总数)。而Java BigDecimal可以更高。因此,在保存到DB之前,需要对BigDecimal值进行四舍五入(例如,使用BigDecimal.setScale())方法。

大小数转换器问题|小数128

 类似资料:
  • 本文向大家介绍在SAP HANA系统中以XML字符串格式存储数据,包括了在SAP HANA系统中以XML字符串格式存储数据的使用技巧和注意事项,需要的朋友参考一下 在较早的SAP HANA版本中,未提供XML函数。在HANA 2.0中,提供了这两个功能-XMLEXTRACT和XMLEXTRACTVALUE,用于在SAP HANA中提取XML字符串。 使用XMLEXTRACT 使用的语法- 指定CL

  • 我有一个名为的文件,它看起来像这样: 我想把那个文件作为字符串数组读入。这实际上在一个包中起作用: 我已经检查了每个导入,每个导入都被导入文件以外的其他东西使用。 在另一个包中,它忽略字符串插值: 在控制台中生成此输出: 唯一提到该文件的是 但是,将其复制到

  • 我有一个通过ORM保存到数据库的对象。对象有一个字符串数组,每个对象的数组长度可以不同。我想知道在db中存储字符串数组的标准做法(例如,我是否应该将所有字符串存储在一个字段中作为csv等)?

  • 我正在学习Spring Data MongoDB的教程(https://spring.io/guides/tutorials/data/2/).在本教程中,成本的类型是BigDecimal,如下所示,并在MongoDB中存储为“字符串”。所以,当我试图通过成本域的升序排序得到排序结果时,我得到了一个错误的结果。 我发现使用BigDecimal类是计算的最佳方式。但是,如果我在MongoDB中使用S

  • 问题内容: 在Java程序中,我具有以下字符串: 每行是一个单独的过程。我想在每一行中使用该运算符计算出两个数字。但是我不想使用任何类型的条件系统来检测每行中的哪个运算符。 实际上,我的主要问题是在没有条件的情况下检测操作员的类型。我不想使用Javascript引擎。我想知道是否有任何有效和标准的方法。 问题答案: J. Selva回应的另一个解决方案: 改进之处 单班 静态块 更好的抽象 导入j

  • 问题内容: 我有一组文本文件,它们代表我想使用JavaScript应用程序下载的来自第三方的数据表。他们看起来像这样: 我一直在尝试使用jQuery来做到这一点。我已经可以使用$ .load,但是我不想将数据存储在DOM中,而是想将其解析为一个对象。每当我尝试使用一种ajaxy方法时,都会收到我不理解的错误。例如: 给我一个价值。任何建议,将不胜感激。 问题答案: 为了使该代码正常工作,事件需要是