[英]How to keep zeros after decimal for BigDecimal in Java Spring Boot?
[英]BigDecimal: Issue with zero as last decimal
我有一個 Spring Boot 應用程序使用一個提供一些十進制值的 rest api,例如:
"Amount": {
"Amount": 160.10,
"Currency": "EUR"
}
我將其映射到給我帶來問題的BigDecimal
。 我需要最后一個小數,即使它為零,因為我需要沒有小數的金額,即使用BigDecimal.unscaledValue()
對於顯示的數據,我希望x.getAmount().unscaledValue()
的輸出為"16010"
,但由於該值在內部表示為160.1
(非顯着 0 被剝離)我得到"1601"
,這是一個因素關閉 10 次,當行中的某些代碼除以 10 時。
該值可以有 0、2 或 3 位小數(取決於貨幣)。
我的第一個想法是使用setScale()
方法,但這並沒有給我帶來好運。
restTemplate
.exchange(request, new ParameterizedTypeReference<List<NotificationMessage>>() {})
.getBody()
import com.fasterxml.jackson.annotation.JsonRawValue;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import java.math.BigDecimal;
import lombok.Data;
@Data
@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public class TransactionAmount {
// @JsonRawValue //my test to force it
private BigDecimal amount;
private String currency;
}
有沒有辦法可以強制 Spring Boot 保留非有效小數?
(修改 API 以改用字符串不是一種選擇)
解決方案只是引入一個自定義Jackson
Mapper
,它將值解析為String
而不是float
:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import java.math.BigDecimal;
@Data
@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public class TransactionAmount {
private BigDecimal amt;
private String ccy;
// Custom mapper to make sure we get the complete decimal value - by treating the amount as a String instead of a Float
@JsonCreator
public TransactionAmount1(
@JsonProperty("Amt") String amount,
@JsonProperty("Ccy") String ccy) {
this.amt = new BigDecimal(amount);
this.ccy = ccy;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.