Нужен ли PHP bcmath для целых центовых значений?

В PHP я пишу приложение, которое требует точности до 2 цифр справа от десятичной точки для валюты (например: я забочусь о 1.23 === 1.23 но не более правых цифр).

Мне известно, что плавающие числа обычно считаются плохой практикой, потому что они неточны со значениями, основанными на характере преобразования из основания 2 в основание 10 справа от десятичной точки. Тем не менее, в моем исследовании наилучшей практики работы с валютными значениями я обнаружил некоторые аргументы, что float не годится, если вам нужна точность, превышающая целые значения цента. Я явно не нуждаюсь в большей точности, чем все значения цента.

Итак, мои вопросы:

  1. Стоит ли тратить дополнительные усилия на сохранение значений в виде строк, которые будут использоваться с bcmath библиотека?
  2. При использовании bcmath lib, я должен хранить значения в базе данных MySQL как строки или decimal что поддерживает MySQL?

Спасибо!

2 ответа

Используйте это, чтобы урезать до двух знаков после запятой без округления.

<?php
$a = 12.37675;
$a = floor($a * 100) / 100; // 12.37
echo $a;

или же

<?php

function dollar($value) {
    return floor($value * 100) / 100;
}

$a = 12.37675;
echo dollar($a);

После дальнейших раскопок я нашел решение в: Должен ли я использовать BCMath для значений с приблизительно 1,2 или 3 десятичными числами?

Согласно принятому ответу на данный пост, не может быть гарантировано число с плавающей запятой для любой точности справа от десятичной точки.

Что касается хранения в БД, кажется, что хранить его в виде строки было бы самым простым вариантом, так как bcmath lib работает со строками.

Другие вопросы по тегам