mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge pull request #2296 from MetaMask/precision-fix
Fix precision to account for small wei increase.
This commit is contained in:
commit
f18615a82a
@ -48,4 +48,42 @@ describe('BnInput', function () {
|
||||
checkValidity () { return true } },
|
||||
})
|
||||
})
|
||||
|
||||
it('can tolerate wei precision', function (done) {
|
||||
const renderer = ReactTestUtils.createRenderer()
|
||||
|
||||
let valueStr = '1000000000'
|
||||
|
||||
const value = new BN(valueStr, 10)
|
||||
const inputStr = '1.000000001'
|
||||
|
||||
|
||||
let targetStr = '1000000001'
|
||||
|
||||
const target = new BN(targetStr, 10)
|
||||
|
||||
const precision = 9 // gwei precision
|
||||
const scale = 9
|
||||
|
||||
const props = {
|
||||
value,
|
||||
scale,
|
||||
precision,
|
||||
onChange: (newBn) => {
|
||||
assert.equal(newBn.toString(), target.toString(), 'should tolerate increase')
|
||||
const reInput = BnInput.prototype.downsize(newBn.toString(), 9, 9)
|
||||
assert.equal(reInput.toString(), inputStr, 'should tolerate increase')
|
||||
done()
|
||||
},
|
||||
}
|
||||
|
||||
const inputComponent = h(BnInput, props)
|
||||
const component = additions.renderIntoDocument(inputComponent)
|
||||
renderer.render(inputComponent)
|
||||
const input = additions.find(component, 'input.hex-input')[0]
|
||||
ReactTestUtils.Simulate.change(input, { preventDefault () {}, target: {
|
||||
value: inputStr,
|
||||
checkValidity () { return true } },
|
||||
})
|
||||
})
|
||||
})
|
||||
|
@ -31,7 +31,7 @@ BnAsDecimalInput.prototype.render = function () {
|
||||
const suffix = props.suffix
|
||||
const style = props.style
|
||||
const valueString = value.toString(10)
|
||||
const newValue = this.downsize(valueString, scale, precision)
|
||||
const newValue = this.downsize(valueString, scale)
|
||||
|
||||
return (
|
||||
h('.flex-column', [
|
||||
@ -145,14 +145,17 @@ BnAsDecimalInput.prototype.constructWarning = function () {
|
||||
}
|
||||
|
||||
|
||||
BnAsDecimalInput.prototype.downsize = function (number, scale, precision) {
|
||||
BnAsDecimalInput.prototype.downsize = function (number, scale) {
|
||||
// if there is no scaling, simply return the number
|
||||
if (scale === 0) {
|
||||
return Number(number)
|
||||
} else {
|
||||
// if the scale is the same as the precision, account for this edge case.
|
||||
var decimals = (scale === precision) ? -1 : scale - precision
|
||||
return Number(number.slice(0, -scale) + '.' + number.slice(-scale, decimals))
|
||||
var adjustedNumber = number
|
||||
while (adjustedNumber.length < scale) {
|
||||
adjustedNumber = '0' + adjustedNumber
|
||||
}
|
||||
return Number(adjustedNumber.slice(0, -scale) + '.' + adjustedNumber.slice(-scale))
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user