Problem is 4 & 5 fit in less that 256 bits (each). You end up with tiny uints in the constant expression, and then those aren't easily converted to the uint256, so ... cast the type explicitly.
uint x = uint(4)/uint(5);
Takeaway is caution with constants because they may be cast in unexpected types.
A sketchy idea:
contract Divide {
function getDivided(uint numerator, uint denominator) public constant returns(uint quotient, uint remainder) {
quotient = numerator / denominator;
remainder = numerator - denominator * quotient;
}
}
Also check out "SafeMath" with "safeDiv()" at Zeppelin: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol
Also, since 4/5 obviously works out to 0 remainder 4, possibly you're really aiming for something more like 80%?
You can bump up the accuracy by working with "decimal" as is common in financial markets. You pass pairs around, the digits and the decimal offset.
So, 1.234 would be written as [1234, 3] with the 3 indicating that there is a decimal in the third spot.
In this case, you would calculate 80, with 2 decimal places (meaning .80).
4 * 10 ** 2 = 400, 400/5 = 80, we raised 4 by 10 ^ 2, so return ...
80,2 and optionally, a remainder.
Hope it helps.
ballot.sol:3:19: Error: Type rational_const 5/4 is not implicitly convertible to expected type uint256. Try converting to type ufixed8x8 or use an explicit conversion. uint result = 5/4
I understand that casting is not implicitly possible but explicit isn't either and I don't see anything I can do to achieve integer division