values smaller than 0.001 sat/B can't be represented by CFeeRate, but they are not rejected.

```
./src/bitcoin-cli -named sendtoaddress address=bcrt1qwkmhqum095zau5rf2velq55cq938vrd7uw8m4r amount=1.23 fee_rate=0.0009

error code: -6
error message:
Fee rate (0.000 sat/vB) is lower than the minimum fee rate setting (1.000 sat/vB)
```

```
./src/bitcoin-cli -named sendtoaddress address=bcrt1qwkmhqum095zau5rf2velq55cq938vrd7uw8m4r amount=1.23 fee_rate=0.000000000009

error code: -3
error message:
Invalid amount

{
    double n;
    
    BOOST_CHECK(ParseDouble("1234", nullptr));
    BOOST_CHECK(ParseDouble("0", &n) && n == 0.0);
    BOOST_CHECK(ParseDouble("1234", &n) && n == 1234.0);
    BOOST_CHECK(ParseDouble("01234", &n) && n == 1234.0); 
    BOOST_CHECK(ParseDouble("2147483647", &n) && n == 2147483647.0);
    BOOST_CHECK(ParseDouble("-2147483648", &n) && n == -2147483648.0);
    BOOST_CHECK(ParseDouble("-1234", &n) && n == -1234.0);
    BOOST_CHECK(ParseDouble("1e6", &n) && n == 1e6);
    BOOST_CHECK(ParseDouble("-1e6", &n) && n == -1e6);
    
    BOOST_CHECK(!ParseDouble("", &n));
    BOOST_CHECK(!ParseDouble(" 1", &n)); 
    BOOST_CHECK(!ParseDouble("1 ", &n));
    BOOST_CHECK(!ParseDouble("1a", &n));
    BOOST_CHECK(!ParseDouble("aap", &n));
    BOOST_CHECK(!ParseDouble("0x1", &n)); 
    BOOST_CHECK(!ParseDouble(STRING_WITH_EMBEDDED_NULL_CHAR, &n));
    
    BOOST_CHECK(!ParseDouble("-1e10000", nullptr));
    BOOST_CHECK(!ParseDouble("1e10000", nullptr));
}
BOOST_AUTO_TEST_CASE(test_FormatParagraph)