Module talk:Math

Page contents not supported in other languages.
Source: Wikipedia, the free encyclopedia.

This module implements a collection of related mathematical operations and number formatting tasks.

bug "�"

Hello, this is not enwiki problem. On bnwiki, this module sometime gives incorrect result. There is problem with "precision_format". For example, {{#invoke:Math|precision_format| 2.0004 | 3}} gives ২�000 instead of ২,০০০ (more example, bn:Module:Math, sandbox). How can i fix this? Please feel free to edit sandbox. --আফতাবুজ্জামান (talk) 23:56, 2 June 2020 (UTC)[reply]

@আফতাবুজ্জামান: That bug is due to the following optimistic code:
local zero_sep = lang:formatNum(1.1)
formatted_num = formatted_num .. zero_sep:sub(2,2)
The code is trying to determine the character for the decimal point (for example, . or ,). The code assumes the local number uses English digits in which case :sub(2,2) will extract the second character which they hope is . or ,. However, at bnwiki 1.1 is ১.১ and the code gets the second byte of the first digit which gives that broken Unicode symbol. A simple fix would be to change the above by commenting out or deleting the first line, and editing the second line:
--local zero_sep = lang:formatNum(1.1)
formatted_num = formatted_num .. '.'
A bit more clever would be to rearrange it to use mw.ustring.sub but that's pointless for you because you know you want a dot. The result is going to use en digits. There's not much that can be done about that apart from the conversion code that we have discussed in the past. Johnuniq (talk) 05:09, 3 June 2020 (UTC)[reply]
@Johnuniq: Thanks. Problem resolved. Everything is giving correct result but for some reason {{round|0.000020004|7}} is giving incorrect result. আফতাবুজ্জামান (talk) 03:02, 4 June 2020 (UTC)[reply]

@আফতাবুজ্জামান:Hmm, that seems to be a bug in lang:formatNum. Put the following in a module sandbox and test with {{#invoke:SANDBOXNAME|main}}.

local function main()
    local lang = mw.getContentLanguage()
    local r = lang:formatNum(0.00002)
    return #r .. ' /' .. r .. '/'
end
return {main=main}

Trying this gives the results shown:

  • At bnwiki: 7 /২.০/ (in en digits, that's "7 /2.0/")
  • At enwiki: 6 /2.0E-5/

The 7 is the length (number of bytes) in the result. Each of the two bn digits is 3 bytes in UTF-8 and the dot is 1, so they add up to 7. The point of that is that there is nothing in the output that is hidden—it's only 7 bytes. I guess you could ask about that at Phabricator. Perhaps e notation is not supported in a language where it is not usually used? Is it used? Johnuniq (talk) 03:59, 4 June 2020 (UTC)[reply]

@Johnuniq: Ya, e notation is uncommon in Bengali. I'm not sure what should i request when submitting a bug for this. If you can, please do. Anyway, after spending many hours i was able to do this, it seems this fixes the problem. Should i implement? --আফতাবুজ্জামান (talk) 00:44, 7 June 2020 (UTC)[reply]
@আফতাবুজ্জামান: That change looks good, well done! I examined the code as far as your change goes but deciding that the overall function always works would be mind-spinnnig stuff which is why I didn't dive in earlier. Re my earlier comment about a bug, if you link to a module sandbox I could create (it would be Module:Sandbox/Johnuniq/format here) I'll probably try reporting it. Johnuniq (talk) 01:29, 7 June 2020 (UTC)[reply]
@Johnuniq: Thanks. here. আফতাবুজ্জামান (talk) 01:45, 7 June 2020 (UTC)[reply]
@আফতাবুজ্জামান: I posted at phab:T254683. Johnuniq (talk) 07:45, 7 June 2020 (UTC)[reply]

I see that a software update since the above has changed what occurs. bn:Module talk:খেলাঘর/Johnuniq/format used to show that lang:formatNum(0.00002) gave the bn equivalent of "2.0" (wrong) while here at enwiki it gave "2.0E-5". Now, both results are the equivalent of "0". Some consequences:

  • {{#invoke:Math|precision_format|2.0004|3}} → 2.000 (good)
  • {{round|0.00019|4}} → 0.0002 (good)
  • {{round|0.000019|5}} → 0
  • {{round|0.000020004|7}} → 000

Johnuniq (talk) 06:26, 11 January 2021 (UTC)[reply]

@Johnuniq Can you tell me the file I should touch for this code? Nokib Sarkar knock 15:41, 6 July 2024 (UTC)[reply]
@Nokib Sarkar: Sorry, the above was 3.5 years ago and I have no recollection of the details. I think I decided that there was a bug in the way certain formatting was done at bnwiki and reported it in the above phab link. As mentioned above, a subsequent change removed the worst of the bug but left this module doing strange things with certain values. I have only done one edit at Module:Math and that was for a routine fix. Is there a problem at bnwiki? Is there an example showing the problem? Has it been discussed there? Johnuniq (talk) 01:24, 7 July 2024 (UTC)[reply]
@Johnuniq Actually, I was trying to clear the backlogs for my native language Bangla Wikipedia and it was still open. Nokib Sarkar knock 07:13, 7 July 2024 (UTC)[reply]
@আফতাবুজ্জামান is it relevant still? Nokib Sarkar knock 08:28, 7 July 2024 (UTC)[reply]
@Nokib Sarkar, আমার এই মূহুর্তে মনে পড়ছে না। I don't remember. আফতাবুজ্জামান (talk) 17:03, 9 July 2024 (UTC)[reply]

Protected edit request on 10 March 2021

Please copy from Module:Math/sandbox to implement the merge of Module:PassMath per Wikipedia:Templates for discussion/Log/2021 February 28#Module:PassMath * Pppery * it has begun... 20:14, 10 March 2021 (UTC)[reply]

 Done Primefac (talk) 18:09, 11 March 2021 (UTC)[reply]
Note that I made a typo in a comment when implementing this merge. It's probably not worth making an edit to a module this highly used to correct it, but I've fixed it in the sandbox. * Pppery * it has begun... 20:34, 11 March 2021 (UTC)[reply]
Given that it's instructions (though I will say buried outside of the /doc) it could potentially cause issues, so I've updated it. Primefac (talk) 22:24, 11 March 2021 (UTC)[reply]

lang:formatNum fix for small numbers of order -5 and smaller

lang:formatNum for numbers of order -5 and smaller returns 0 (for en language). Temporary(?) fix in lua pseudocode:

if order(math.abs(value)) < -4
  formatted_num = lang:formatNum(math.abs(value), noCommafy=true)
else
  formatted_num = lang:formatNum(math.abs(value))

Context: Template_talk:Round#Bug_in_rounding_0.000020004?. MarMi wiki (talk) 19:49, 26 April 2021 (UTC)[reply]

Implemented in sandbox. MarMi wiki (talk) 15:21, 27 April 2021 (UTC)[reply]

Rounding in the module and rounding in the expr

p._round function.

For 0.005 it returns: invoke 0.01, expr 0.01

For -0.005 it returns: invoke 0.00, expr -0.01

Called by: invoke:Math|precision_format|0.005|2, expr:0.005 round 2

What type of rounding function exactly it is supposed to be? It looks like half up rounding, which doesn't match the rounding used by expr. Is that intentional? MarMi wiki (talk) 19:10, 27 August 2023 (UTC)[reply]