【发布时间】:2016-07-11 09:35:49
【问题描述】:
我正在使用number_format 以不同格式显示十进制数字(价格,根据区域配置等)。我更喜欢money_format。在任何情况下,number_format 都用于显示文本数量,因此,例如,我将为美国显示$1,203.56,为欧洲显示1.090,00€。当然,物品价格总和等的内部计算,我使用number_format来四舍五入价格,折扣等。我使用
number_format($price * quantity- $discounts ... , 2, ".", "");
我知道这是正确的,并且将完美地添加所有值,并且最终结果中的小数点后两位不得超过。我将其存储在数据库中,然后在导航器屏幕中显示每个案例的number_format 版本(文本)。但我担心在我的服务器中,他们可能会更改配置,突然 PHP 会使用 , 作为小数分隔符,混合计算的数量?这是可能的还是保证. 的科学记数法作为小数点并且在数字计算中不会使用千位分隔符?我很担心,因为 PHP 没有键入,所以number_format 的“类型”是字符串。我还必须投到(float) 吗?我所做的测试还可以,但我担心可能会出现问题。
【问题讨论】:
-
不要使用
number_format对数字进行四舍五入。number_format用于格式化数字以用于文本表示,而不是用于进一步计算。 -
将数字存储为数据库中的数字,仅当您显示这些数字时,使用 number_format
-
问题是我必须将部分数量四舍五入到小数点后 2 位,精确到最接近的数字,就像 number_format 一样。例如,如果我得到 25.69 的价格并应用 21% 的折扣,我得到 5.3949。我需要准确地存储和应用 5.39 的折扣,并且我需要丢弃第三个小数点和后续小数点。这是强制性的。我可以使用其他PHP函数如round、floor、ceil等吗?
-
是的,当然你可以使用
round()、floor()和ceil()等常规函数,你的代码中有什么让你觉得你不能用的吗? -
不,我很狡猾地认为 round() 的舍入行为不是我想要的,但是 number_format 做到了,所以我使用了参数 number_format:浮点数,“。”, “”,一切都在计算中。但是后来因为返回值是一个字符串,所以它不安全,并且可能会更改配置,这可能是危险的。当然,由于 PHP 是松散类型的,因此返回值的类型无关紧要。我现在用
round更改了这些实例,一切都完全一样,但我更有信心了。
标签: php point decimal-point