десятичный — PHP bcmath требуется для целых значений цента?

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

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

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

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

Спасибо!

0

Решение

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

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

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

0

Другие решения

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

<?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);
0

По вопросам рекламы [email protected]