ID: 50696
User updated by: endosquid at endosquid dot com
Reported By: endosquid at endosquid dot com
Status: Wont fix
Bug Type: Math related
Operating System: Linux 32 bit
PHP Version: 5.3.1
New Comment:
Dramatic? You've obviously never worked in a change-request-release
environment. We have number_format in literally thousands of places
across 50 or 60 separate products. Each of those changes will have to be
coded, tested, written-off, released, tested by the clients since this
is tax data and has to be precise for tax planning and retirement
planning.
So, before you go belittling the developers and users depending on PHP,
perhaps you should stop and think about the massive effect this change
has had on us and not act so dismissive.
5.3.x was not available on our last platform, which is why we are
moving to a supported, fairly-recent platform. Why you have so much
anger towards this bug is not a proper way to triage or respond to user
requests. We have done nothing but explain how this change will
massively affect our calculations.
Our only feasible option is to patch php back to the old behavior, but
my C is fairly rusty and we ran into issues with time testing the ins
and outs from buffers in the number_format function in math.c
Previous Comments:
------------------------------------------------------------------------
[2010-01-08 22:23:41] rasmus@php.net
Months? Being a bit dramatic here?
sed -i "s#number_format(#number_format((float)#g" *.php
Escalate? Oh how I wish I had someone to escalate to.
The change was part of standardizing all of PHP on the same parameter
parsing code. It is called zend_parse_parameters() internally. Most
of PHP was using this already, but there were still some stragglers
like number_format().
The first PHP 5.3 release candidate was back in March 2009. We put
these release candidates out there so people who "will have MONTHS of
work" because of small changes can chime in then and make their case.
The release candidate period lasted until July.
------------------------------------------------------------------------
[2010-01-08 21:51:14] endosquid at endosquid dot com
This is going to cause us MONTHS or fixing code for no real benefit
since this behavior change is arbitrary and seemingly, was made for no
reason. We are all engineers and developershere, and can't seem to get
the reasoning behind returning NULL when a number is called for in the
return.
It's not a number definition, but FORMATTING. How do you format nothing
in the numerical system? By having it be zero. You don't have NULL
dollars in your bank account, do you?
Please escalate this to someone who can answer the question as to why
this was changed. If no one knows, then why was default behavior
changed?
------------------------------------------------------------------------
[2010-01-08 21:39:01] rasmus@php.net
No, I am not missing the point. This same behaviour could very well be
a bug in an app as well. If this was changed in a minor version, I'd
agree with you on the BC change, but we have been working on catching
these weird edge-case scenarios that lead to unexpected bugs.
------------------------------------------------------------------------
[2010-01-08 21:26:27] endosquid at endosquid dot com
I submit that you may have missed the point:
We are passing a (possibly uninitialized, or null-valued) variable to
the function, in hundreds of places and web pages, and we would not
expect such a fundamental function to suddenly return a different
result. What is unreasonable about expecting a "number formatting"
function to default to "0" if given non-numeric or null input, *esp*
since that has been the behavior since Day 1?
------------------------------------------------------------------------
[2010-01-08 19:20:29] rasmus@php.net
Why are you passing an empty string in place of a number there? You
are essentially asking for an empty string to be printed with 0 decimal
places and you are getting back an empty string. You also get a big
warning about that, of course. How about "a",0 what do you expect that
to return?
I think the right solution for you here is to be explicit about casting
your weird inputs to a float. number_format((float)$weird,'0') will
take care of it.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/50696
--
Edit this bug report at http://bugs.php.net/?id=50696&edit=1