Whats the weight? Is this the code for the rare item? If so, then if you are doing something like 0.0000001 as the weight, the odds wont actually be 0.0000001%, it will be 0.99%. This is because math.random(0,100) only picks whole numbers. In other words, the item will be given if 0 is selected out of the 101 possible whole numbers ranging from 0 to 100. What you may be looking for instead is:

local weight = 0.0000000001 -- this is equivalent to 0.0000001%, see below comment
if math.random() <= weight then -- math.random() without arguments returns any decimal number between 0 and 1
return true
end
return false

When you declare a range for the math.random function. It returns an integer value from the specified range. If you just use math.random with no parameters it should return a float value.
So try this simple change first before anything more advanced can occur. Additionally, you should use the print for checking if the random function is actually returning float values.

(As I am writing this, I was not able to completely test this through roblox studio.)

local weight = 0.0000000001
if math.random() <= weight then
return true
end
return false

If you want to do it using integers you could use this structure of code.

-- You can use floats to define these variables.
local minPercentage = 1 -- Minimum percentage value (e.g., 1%)
local maxPercentage = 100 -- Maximum percentage value (e.g., 100%)
local randomPercentage = math.random(minPercentage, maxPercentage)
print(randomPercentage .. "%") -- Print the random percentage