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

LOCK(pwallet->cs_wallet);
    std::string error_msg;
    CTxDestination dest = DecodeDestination(request.params[0].get_str(), error_msg);
    
    if (!IsValidDestination(dest)) {
        
        if (error_msg.empty()) error_msg = "Invalid address";
        throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, error_msg);
    }
    UniValue ret(UniValue::VOBJ);
    std::string currentAddress = EncodeDestination(dest);
    ret.pushKV("address", currentAddress);
    CScript scriptPubKey = GetScriptForDestination(dest);
    ret.pushKV("scriptPubKey", HexStr(scriptPubKey));
    std::unique_ptr<SigningProvider> provider = pwallet->GetSolvingProvider(scriptPubKey);
    isminetype mine = pwallet->IsMine(dest);
    ret.pushKV("ismine", bool(mine & ISMINE_SPENDABLE));
    bool solvable = provider && IsSolvable(*provider, scriptPubKey);
    ret.pushKV("solvable", solvable);
    if (solvable) {
       ret.pushKV("desc", InferDescriptor(scriptPubKey, *provider)->ToString());
    }
    DescriptorScriptPubKeyMan* desc_spk_man = dynamic_cast<DescriptorScriptPubKeyMan*>(pwallet->GetScriptPubKeyMan(scriptPubKey));
    if (desc_spk_man) {
        std::string desc_str;
        if (desc_spk_man->GetDescriptorString(desc_str, false)) {
            ret.pushKV("parent_desc", desc_str);
        }
    }
    ret.pushKV("iswatchonly", bool(mine & ISMINE_WATCH_ONLY));