Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Precision" is the total number of significant digits in a number (e.g. for 1.234, precision = 4, not 3). What you're using it for (decimal places) is usually called the "scale" #7

Open
hikari-no-yume opened this issue Dec 30, 2015 · 9 comments

Comments

@hikari-no-yume
Copy link

As pointed out on reddit: https://www.reddit.com/r/PHP/comments/3yq3yx/byteformatter_is_a_psr2_compliant_library_that/cygfps8

@Bilge
Copy link
Member

Bilge commented Dec 30, 2015

Is there a good source to verify this?

@hikari-no-yume
Copy link
Author

@Bilge
Copy link
Member

Bilge commented Dec 30, 2015

I'm not sure if a dictionary is appropriate here since we're talking about mathematical usage of terms rather than English usage.

@drrcknlsn
Copy link

Every major RDBMS you can think of uses the precision/scale terminology.

@Bilge
Copy link
Member

Bilge commented Dec 31, 2015

@drrcknlsn Thank you for the large number of sources. In the database world this represents a clear consensus of terminology.

Furthermore, I found an article on Numerical Precision from Wolfram which uses the terms precision and accuracy. These are equivalent to precision and scale as used in the database world. More to the point, it is clear that precision is never used to refer to digits to the right of the decimal point so this bug is now confirmed.

@okdana
Copy link
Contributor

okdana commented Dec 31, 2015

FYI, this kind of relates to the number_format() suggestion i had. Presuming that something to that effect will go in, this change seems like it'd be intertwined with it

@okdana
Copy link
Contributor

okdana commented Dec 31, 2015

btw, one can probably be forgiven for using 'precision' here, since PHP itself uses it the same way

@Bilge
Copy link
Member

Bilge commented Dec 31, 2015

@okdana That's interesting. Also, Wolfram uses the term accuracy, but accuracy is just a synonym for precision anyway. I think this places the terminology under dispute once more until more sources can authoritatively declare the correct naming.

@okdana
Copy link
Contributor

okdana commented Jan 1, 2016

I personally use 'precision' in conversation to describe number of decimal places, but i have a very poor grasp of mathematics, so idk. I did some Google research and i found the following:

I could only find a few specs that use 'precision' un-ambiguously to refer to decimal places:

  • PHP's round(), as previously mentioned
  • In dc, the 'precision value' sets the 'number of fraction digits'

Several are ambiguous, inconsistent, or irrelevant:

  • The POSIX C printf() specification uses 'precision' for both digits before radix (for %i) and digits after radix (for %f)
  • Almost all other languages with printf() or a similar (PHP, Perl, Python, Ruby) use the POSIX terminology for those features
  • Perl's Math::BigFloat uses 'precision' similarly to POSIX

These side-step the issue entirely:

  • PHP's number_format() uses $decimals
  • Python's round() uses ndigits
  • Ruby's Float.round() uses ndigits
  • JavaScript's Number.prototype.toFixed() uses digits
  • Java's NumberFormat and friends use 'fraction digits' to refer to digits after the radix
  • Microsoft languages (e.g. Math.Round() in C#) use decimals

These use 'scale' for digits after the radix:

  • As @drrcknlsn mentioned, seemingly all RDMBSes
  • Java's BigDecimal (c.f. setScale())
  • bc, as well as its PHP bindings (c.f. bcscale())

I think it's probably valid outside of a formal arithmetic context to use 'precision' to refer to number of decimal places, but now that i know the 'proper' term, i would probably have used 'scale' instead, personally.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants