gpt4 book ai didi

php - 我应该将 BCMath 用于大约 1,2 或 3 位小数的值吗?

转载 作者:可可西里 更新时间:2023-10-31 23:05:25 25 4
gpt4 key购买 nike

我的数据库中有大约 10-15 个数字,精度为 1、2 或 3 位小数,有符号和无符号。

使用的数据类型示例:

decimal(10,3), decimal(10,2), decimal(10,1)

我用 PHP 计算它们是这样的:

$result = ($value1from_col1 + ($value2from_col2 * 30)/500) * 0.453;

然后我使用一些 round() 函数,如下所示:

$result_round = round($result, 2, PHP_ROUND_HALF_UP);

$result_round 的结果最大为:100.000,999

我正在检查这个:How much precision for a bcmath PHP library?答案表明,如果您不使用 round()、printf 等函数,这将不是问题。

那我应该使用 BCMath-extension 吗? (只是因为我正在使用 round())

最佳答案

一些常见的数字不能精确地用二进制表示(所谓常见,我的意思是它们经常出现在基于人类的系统中,显然它本身是一个无意义的概念)。例如,0.1、0.2。要了解有关二进制 fp 的一些问题,请查看此问题 Why can't decimal numbers be represented exactly in binary?

对于许多常见的应用程序,二进制 float 是错误的选择。例如,货币计算将是“错误的”,因为作为人类,我们期望以十进制计数,精确到预定的小数位数(对于货币而言为 2)。在财务计算中使用二进制 fp 导致的舍入错误甚至可能成为盗窃的机会!

bcmath 实现十进制 FP,因此通常是更安全的选择。

对于真实世界值(value)的测量,例如在科学实验中,二进制 FP 就很好。

如果您认为您正在存储固定数量的小数点,那么您可能确实需要 bcmath 而不是标准的二进制 float 。如果您使用的是 bcmath,还要检查您的数据库表示并在那里使用小数类型。

关于php - 我应该将 BCMath 用于大约 1,2 或 3 位小数的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23732640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com