空手道 API : 在 Json 负载空手道 API 中将数字四舍五入到小数点后 2 位
Karate API : Round a number to 2 decimal point in Json payload Karate API
我正在尝试从例如 中的键传递一个值。 “29.00”。我将此值传递给的请求不接受围绕该值的双引号。它只接受 2 个小数点和一个数字。例如 29.00
问题是当我使用 parseInt(amount) 或 parseFloat(amount) 时它会丢弃最后一个零。因此该值变为 api 不接受的 29.0。
我只需要该值保留 2 个小数点,这样尾随的 0 就不会被删除。
我使用了像 function(test) { return parseInt(amount).toFixed(2)} 这样的 JS 函数,但它不起作用。
我使用的代码示例:
def reqJson = 读取 ('Json/PaynowPayload.json')
默认金额 = SearchResults.ratePlans[0].房间[0].totalCost.amount
def Newamount = parseInt(amount).toFixed(2)
设置reqJson.payment.amount.minorUnits = Newamount
如有任何帮助,我们将不胜感激
首先,在我看来,如果服务器不接受 29.0
并且只接受 29.00
这是服务器端的错误,空手道做了正确的事情为您呈现这个。
无论如何,你总是可以像这样“强制”一个字符串作为有效负载,同时看看 text
keyword:
* url 'https://httpbin.org/anything'
* header Content-Type = 'application/json'
* request '{ "foo": 29.00 }'
* method post
即使请求日志可能显示 29.0
,您也可以验证上述请求是否符合您的预期,因为响应将回应发送的请求:
1 > POST https://httpbin.org/anything
1 > Content-Type: application/json; charset=UTF-8
1 > Content-Length: 16
1 > Host: httpbin.org
1 > Connection: Keep-Alive
1 > User-Agent: Apache-HttpClient/4.5.13 (Java/11.0.11)
1 > Accept-Encoding: gzip,deflate
{"foo":29.0}
16:34:12.445 [main] DEBUG com.intuit.karate - response time in milliseconds: 1293
1 < 200
1 < Date: Fri, 02 Jul 2021 11:04:12 GMT
1 < Content-Type: application/json
1 < Content-Length: 510
1 < Connection: keep-alive
1 < Server: gunicorn/19.9.0
1 < Access-Control-Allow-Origin: *
1 < Access-Control-Allow-Credentials: true
{"args":{},"data":"{ \"foo\": 29.00 }","more": "..."}
所以现在由您来创建所需的 JSON 字符串。这里只是一种方式,还有其他的可能性(空手道1.X):
* def temp = java.lang.String.format("%.2f", new java.lang.Double(29))
* def body = `{ "foo": ${temp} }`
* url 'https://httpbin.org/anything'
* header Content-Type = 'application/json'
* request body
* method post
我正在尝试从例如 中的键传递一个值。 “29.00”。我将此值传递给的请求不接受围绕该值的双引号。它只接受 2 个小数点和一个数字。例如 29.00
问题是当我使用 parseInt(amount) 或 parseFloat(amount) 时它会丢弃最后一个零。因此该值变为 api 不接受的 29.0。
我只需要该值保留 2 个小数点,这样尾随的 0 就不会被删除。
我使用了像 function(test) { return parseInt(amount).toFixed(2)} 这样的 JS 函数,但它不起作用。
我使用的代码示例:
def reqJson = 读取 ('Json/PaynowPayload.json')
默认金额 = SearchResults.ratePlans[0].房间[0].totalCost.amount
def Newamount = parseInt(amount).toFixed(2)
设置reqJson.payment.amount.minorUnits = Newamount
如有任何帮助,我们将不胜感激
首先,在我看来,如果服务器不接受 29.0
并且只接受 29.00
这是服务器端的错误,空手道做了正确的事情为您呈现这个。
无论如何,你总是可以像这样“强制”一个字符串作为有效负载,同时看看 text
keyword:
* url 'https://httpbin.org/anything'
* header Content-Type = 'application/json'
* request '{ "foo": 29.00 }'
* method post
即使请求日志可能显示 29.0
,您也可以验证上述请求是否符合您的预期,因为响应将回应发送的请求:
1 > POST https://httpbin.org/anything
1 > Content-Type: application/json; charset=UTF-8
1 > Content-Length: 16
1 > Host: httpbin.org
1 > Connection: Keep-Alive
1 > User-Agent: Apache-HttpClient/4.5.13 (Java/11.0.11)
1 > Accept-Encoding: gzip,deflate
{"foo":29.0}
16:34:12.445 [main] DEBUG com.intuit.karate - response time in milliseconds: 1293
1 < 200
1 < Date: Fri, 02 Jul 2021 11:04:12 GMT
1 < Content-Type: application/json
1 < Content-Length: 510
1 < Connection: keep-alive
1 < Server: gunicorn/19.9.0
1 < Access-Control-Allow-Origin: *
1 < Access-Control-Allow-Credentials: true
{"args":{},"data":"{ \"foo\": 29.00 }","more": "..."}
所以现在由您来创建所需的 JSON 字符串。这里只是一种方式,还有其他的可能性(空手道1.X):
* def temp = java.lang.String.format("%.2f", new java.lang.Double(29))
* def body = `{ "foo": ${temp} }`
* url 'https://httpbin.org/anything'
* header Content-Type = 'application/json'
* request body
* method post