Jump to content

Module talk:Math

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

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

bug "�"

[edit]

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

[edit]

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

[edit]

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

[edit]

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]

Removing commas/separators

[edit]

Would it be possible to add an argument to this module to allow it to output a raw result (similar to {{formatnum:Number|R}} without the commas every three digits? Sdkbtalk 22:18, 28 July 2025 (UTC)[reply]

Module:Math#cleanNumber describes what you're looking for. Primefac (talk) 22:48, 28 July 2025 (UTC)[reply]
Ah, but it cannot be used normally when invoking this module, so is there any way to get it to work on a template like {{Round}}? Sdkbtalk 00:24, 29 July 2025 (UTC)[reply]
You'd probably have to use a new parameter to implement but it should be possible without creating a new module. Primefac (talk) 09:12, 30 July 2025 (UTC)[reply]
Would you be able to assist with that? I don't know Lua. Sdkbtalk 14:13, 11 August 2025 (UTC)[reply]
Maybe, I haven't really looked at the code that much/often. I'll put it on my to-do list. Primefac (talk) 22:11, 17 August 2025 (UTC)[reply]