Validate a number to have 2 decimal points

Hey All,

Wanted to know if we can create test to validate a certain number in response that has only 2 decimal place, if it has more than 2 decimal places then its a fail test.

e.g

â€śDetailsâ€ť: {
â€śratesâ€ť: [
{
â€śpriceâ€ť: 9.90
}

e.g something like

var jsondata = pm.response.json ();

pm.test(â€śPrice has 2 decimal pointsâ€ť, function (){
pm.expect(jsondata.Details.rates[0].price).toFixed( 2 )

});

Your going to need a function to count the decimal places.

Something like.

``````// https://stackoverflow.com/questions/27082377/get-number-of-decimal-places-with-javascript

var countDecimals = function(value) {
let text = value.toString()
// verify if number 0.000005 is represented as "5e-6"
if (text.indexOf('e-') > -1) {
let [base, trail] = text.split('e-');
let deg = parseInt(trail, 10);
return deg;
}
// count decimals for number in representation like "0.123456"
if (Math.floor(value) !== value) {
return value.toString().split(".")[1].length || 0;
}
return 0;
}

let value1 = 37.435345;
let decimalPlaces1 = countDecimals(value1) //6

let value2 = 20.00;
// note the 00 will be stripped into JavaScript, so the assertion is looking for less than 3 instead of eql 2.
let decimalPlaces2 = countDecimals(value2) //0

let value3 = 9.90;
// the zero will also get stripped
let decimalPlaces3 = countDecimals(value3) //1

let value4 = "9.90";
// the function can take strings, so you could stringify the number when retrieving it.
let decimalPlaces4 = countDecimals(value4) // 2

let value5 = "9.901";
// boundary test
let decimalPlaces5 = countDecimals(value5) // 3

pm.test(`1: Two decimal places : \${value1}`, () => {
pm.expect(decimalPlaces1).to.be.lessThan(3);
});

pm.test(`2: Two decimal places : \${value2}`, () => {
pm.expect(decimalPlaces2).to.be.lessThan(3);
});

pm.test(`3: Two decimal places : \${value3}`, () => {
pm.expect(decimalPlaces3).to.be.lessThan(3);
});

pm.test(`4: Two decimal places : \${value4}`, () => {
pm.expect(decimalPlaces4).to.be.lessThan(3);
});

pm.test(`5: Two decimal places : \${value5}`, () => {
pm.expect(decimalPlaces5).to.be.lessThan(3);
});

``````

1 Like

Hey @michaelderekjones, This is absolutely brilliant.

This work, thank you for the help.

Alternatively, if you really just need to check for 2 decimals or less specifically, you can also do this:

``````const hasAtMostTwoDecimals = (number) => number * 100 % 1 === 0

const price = jsondata.Details.rates[0].price
pm.expect(hasAtMostTwoDecimals(price)).to.be.true
``````