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