Les types float et double sont principalement conçus pour les calculs scientifiques et les calculs techniques. Ils effectuent des opérations binaires en virgule flottante et sont soigneusement conçus pour fournir des calculs approximatifs plus précis sur une large plage de valeurs. Cependant, ils ne fournissent pas de résultats totalement précis et ne doivent pas être utilisés lorsque des résultats précis sont requis. Habituellement, les calculs commerciaux nécessitent souvent BigDecimal pour calculer des valeurs avec des exigences de grande précision. Par exemple,
0.07 + 0.020.58 - 0.421.005 * 10015.1 / 1000
Peu importe dans n'importe quel environnement, vous devez convertir le code to Seul le code machine binaire peut être reconnu par la machine. Lorsque les nombres à virgule flottante sont générés directement, la précision sera conservée. Cependant, lorsque les nombres à virgule flottante sont calculés, la précision peut être perdue. Dans ce cas, BigDecimal est nécessaire pour. calcul.
1. Créer BigDecimal
BigDecimal a un constructeur qui prend un nombre à virgule flottante double précision comme paramètre. En fait, lorsque des nombres à virgule flottante sont transmis pour. calcul, la précision sera quand même perdue.
= BigDecimal(1.005= BigDecimal(100= BigDecimal("1.005"= BigDecimal("100"100.49999999999998934185896359849721193313598632812500 100.500
Mais vous pouvez constater que lorsque vous transmettez une chaîne, vous obtenez des résultats précis, et BigDecimal.valueOf(double val) peut également obtenir des résultats précis. Vous pouvez voir le code source de BigDecimal.valueOf(double. val) ci-dessous
public static BigDecimal valueOf(double val) {// Reminder: a zero double returns '0.0', so we cannot fastpath// to use the constant ZERO. This might be important enough to// justify a factory approach, a cache, or a few private// constants, later.return new BigDecimal(Double.toString(val)); }
Cette méthode convertit d'abord les paramètres en type String, puis appelle les paramètres de construction dont les paramètres sont de type String, donc lorsque vous utilisez BigDecimal, essayez de utilisez le nouveau BigDecimal(String val) ou BigDecimal.valueof(double val) pour garantir des résultats précis.
2.compareTo
BigDecimal utilise compareTo() pour comparer les tailles.
0.05).compareTo(BigDecimal.valueOf(0.040.04).compareTo(BigDecimal.valueOf(0.040.03).compareTo(BigDecimal.valueOf(0.04
BigDecimal.compareTo(BigDecimal val)
Quand Renvoie 1 lorsque BigDecimal est supérieur à val,
renvoie -1 lorsque BigDecimal est inférieur à val,
renvoie 0 lorsque BigDecimal est égal à val.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!