diff --git a/src/jv.c b/src/jv.c index 76d2bf82..930fb6fb 100644 --- a/src/jv.c +++ b/src/jv.c @@ -758,7 +758,7 @@ jv jv_number_negate(jv n) { if (JVP_HAS_FLAGS(n, JVP_FLAGS_NUMBER_LITERAL)) { jvp_literal_number* m = jvp_literal_number_alloc(jvp_dec_number_ptr(n)->digits); - decNumberMinus(&m->num_decimal, jvp_dec_number_ptr(n), DEC_CONTEXT()); + decNumberCopyNegate(&m->num_decimal, jvp_dec_number_ptr(n)); jv r = {JVP_FLAGS_NUMBER_LITERAL, 0, 0, 0, {&m->refcnt}}; return r; } diff --git a/tests/jq.test b/tests/jq.test index d45ecd24..557432d9 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -2443,6 +2443,11 @@ true null true +# Unary negation keeps the sign of zero +[-0, -(-0), (.[] | -.)] | map(tojson) +[0, -0] +["-0","0","-0","0"] + . |= try . catch . 1 1