Prenons une note des parties qui ont été traversées dans le développement de Accounting Saas Japan. C'est une histoire où j'avais précédemment externalisé le développement à l'étranger, et il y avait une partie où je calculais facilement en utilisant des flottants et des doubles, et je l'ai corrigée moi-même.
Fondamentalement, les types binaires à virgule flottante tels que float et double ne doivent pas être utilisés dans les calculs monétaires. Pourquoi? C'est exactement dans le calcul des points Parce qu'il ne peut pas être calculé.
Qu'est-ce que ça veut dire
float a = 1.03;
float b = 0.42;
System.out.println(a-b)
0.6100000000000001
Ce sera. Je ne peux pas vous donner le montant exact ...
Utilisez Big Decimal si vous souhaitez calculer le montant avec précision.
import java.math.BigDecimal
BigDecimal a = new BigDecimal("1.03");
BigDecimal b = new BigDecimal("0.42");
BigDecimal c = a.subtract(b);
System.out.println(c.toString());
0.61
BigDecimal ne peut pas être décrit avec un code de calcul, il est donc difficile à voir de toute façon, et cela semble ennuyeux.
Il y a un piège si vous pouvez utiliser Big Decimal ici. Si vous faites une erreur dans l'affectation initiale dans BigDecimal, cela n'aura pas de sens même si vous essayez de calculer avec précision dans BigDecimal. Cela signifie que lorsque vous remplacez une fraction, vous ne devez pas la substituer numériquement. Vous devez le remplacer par une lettre.
BigDecimal rate1 = new BigDecimal("0.1");
BigDecimal rate2 = new BigDecimal(0.1);
C'est la différence Le premier peut être calculé avec précision car il est passé en tant qu'argument de chaîne. Ce dernier est un piège où 0.1 s'écoule vers le constructeur de l'argument double, il est donc traité comme une virgule flottante binaire puis assigné! Je n'ai pas besoin du constructeur à double argument lui-même, et je veux que ce soit une erreur de compilation.
J'utilisais des flotteurs et des doubles partout pour l'externalisation, et c'était difficile de le réparer.Je faisais un traitement de fraction effrayant pour corriger l'erreur en traitant avec de petites mains. J'étais effrayé. Il est facile de programmer dans le calcul du ratio et le calcul des coordonnées de la configuration de l'écran qui ne nécessite pas une précision parfaite, il est donc facile d'utiliser double ou float, mais pour ceux qui construisent un système qui gère de l'argent, "double pour de l'argent" Il est de notoriété publique que vous devez savoir que «le flottement est interdit» dès le début. Je pleurerai 1 yen plus tard.
Nous avons arrêté cette production offshore et l'avons entièrement réalisée en interne, et nous recherchons actuellement des amis pour créer le système ensemble.
Recommended Posts