2017-02-21 1 views
0

J'ai un problème avec Big Decimal et arrondi. J'ai un prix d'entrée comme 35,90 et le rendement de sortie 35,9Big Decimal arrondi

Voilà comment je fais de mon arrondissement:

BigDecimal scaledResult = rs.getPrice().setScale(2, BigDecimal.ROUND_HALF_UP); 
sc.setPrice(scaledResult); 

qui retourne la sortie 35.9, même si je mets l'échelle à deux décimales. Des idées? Merci!

+5

Ce n'est pas un problème d'arrondi (comme 35,9 = = 35,90), c'est un problème de formatage. – Kayaman

+1

Quand vous dites qu'il * renvoie * 35.9, que voulez-vous dire? Vous produisez le résultat quelque part? – jwatkins

+0

Renvoyé par une API vers le côté client comme 35.9 bien que dans la base de données il soit stocké comme 35.90. – Dayna

Répondre

0

Merci les gars pour votre aide, voici comment je l'ai résolu en écrivant un sérialiseur:

public class BigDecimalSerializer extends JsonSerializer<BigDecimal> { 
    @Override 
    public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider) throws IOException, 
      JsonProcessingException { 
     jgen.writeString(value.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); 
    } 
} 

et les champs de mon modèle:

@JsonSerialize(using = BigDecimalSerializer.class) 
private BigDecimal price;