mirror of
https://github.com/fastfloat/fast_float.git
synced 2025-12-06 16:56:57 +08:00
Adding example.
This commit is contained in:
parent
cfb44c2592
commit
d797a3a05d
26
README.md
26
README.md
@ -97,6 +97,32 @@ int main() {
|
||||
}
|
||||
```
|
||||
|
||||
You can parse delimited numbers:
|
||||
```C++
|
||||
const std::string input = "234532.3426362,7869234.9823,324562.645";
|
||||
double result;
|
||||
auto answer = fast_float::from_chars(input.data(), input.data()+input.size(), result);
|
||||
if(answer.ec != std::errc()) {
|
||||
// check error
|
||||
}
|
||||
// we have result == 234532.3426362.
|
||||
if(answer.ptr[0] != ',') {
|
||||
// unexpected delimiter
|
||||
}
|
||||
answer = fast_float::from_chars(answer.ptr + 1, input.data()+input.size(), result);
|
||||
if(answer.ec != std::errc()) {
|
||||
// check error
|
||||
}
|
||||
// we have result == 7869234.9823.
|
||||
if(answer.ptr[0] != ',') {
|
||||
// unexpected delimiter
|
||||
}
|
||||
answer = fast_float::from_chars(answer.ptr + 1, input.data()+input.size(), result);
|
||||
if(answer.ec != std::errc()) {
|
||||
// check error
|
||||
}
|
||||
// we have result == 324562.645.
|
||||
```
|
||||
|
||||
## Reference
|
||||
|
||||
|
||||
@ -224,6 +224,33 @@ TEST_CASE("decimal_point_parsing") {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("issue19") {
|
||||
const std::string input = "234532.3426362,7869234.9823,324562.645";
|
||||
double result;
|
||||
auto answer = fast_float::from_chars(input.data(), input.data()+input.size(), result);
|
||||
CHECK_MESSAGE(answer.ec == std::errc(), "We want to parse up to 234532.3426362\n");
|
||||
CHECK_MESSAGE(answer.ptr == input.data() + 14,
|
||||
"Parsed the number " << result
|
||||
<< " and stopped at the wrong character: after " << (answer.ptr - input.data()) << " characters");
|
||||
CHECK_MESSAGE(result == 234532.3426362, "We want to parse234532.3426362\n");
|
||||
CHECK_MESSAGE(answer.ptr[0] == ',', "We want to parse up to the comma\n");
|
||||
|
||||
answer = fast_float::from_chars(answer.ptr + 1, input.data()+input.size(), result);
|
||||
CHECK_MESSAGE(answer.ec == std::errc(), "We want to parse 7869234.9823\n");
|
||||
CHECK_MESSAGE(answer.ptr == input.data() + 27,
|
||||
"Parsed the number " << result
|
||||
<< " and stopped at the wrong character " << (answer.ptr - input.data()));
|
||||
CHECK_MESSAGE(answer.ptr[0] == ',', "We want to parse up to the comma\n");
|
||||
CHECK_MESSAGE(result == 7869234.9823, "We want to parse up 7869234.9823\n");
|
||||
|
||||
answer = fast_float::from_chars(answer.ptr + 1, input.data()+input.size(), result);
|
||||
CHECK_MESSAGE(answer.ec == std::errc(), "We want to parse 324562.645\n");
|
||||
CHECK_MESSAGE(answer.ptr == input.data() + 38,
|
||||
"Parsed the number " << result
|
||||
<< " and stopped at the wrong character " << (answer.ptr - input.data()));
|
||||
CHECK_MESSAGE(result == 324562.645, "We want to parse up 7869234.9823\n");
|
||||
}
|
||||
|
||||
TEST_CASE("issue19") {
|
||||
const std::string input = "3.14e";
|
||||
double result;
|
||||
|
||||
@ -4,11 +4,34 @@
|
||||
#include <string>
|
||||
#include <system_error>
|
||||
|
||||
|
||||
bool many() {
|
||||
const std::string input = "234532.3426362,7869234.9823,324562.645";
|
||||
double result;
|
||||
auto answer = fast_float::from_chars(input.data(), input.data()+input.size(), result);
|
||||
if(answer.ec != std::errc()) { return false; }
|
||||
if(result != 234532.3426362) { return false; }
|
||||
if(answer.ptr[0] != ',') { return false; }
|
||||
answer = fast_float::from_chars(answer.ptr + 1, input.data()+input.size(), result);
|
||||
if(answer.ec != std::errc()) { return false; }
|
||||
if(result != 7869234.9823) { return false; }
|
||||
if(answer.ptr[0] != ',') { return false; }
|
||||
answer = fast_float::from_chars(answer.ptr + 1, input.data()+input.size(), result);
|
||||
if(answer.ec != std::errc()) { return false; }
|
||||
if(result != 324562.645) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
int main() {
|
||||
const std::string input = "3.1416 xyz ";
|
||||
double result;
|
||||
auto answer = fast_float::from_chars(input.data(), input.data()+input.size(), result);
|
||||
if((answer.ec != std::errc()) || ((result != 3.1416))) { std::cerr << "parsing failure\n"; return EXIT_FAILURE; }
|
||||
std::cout << "parsed the number " << result << std::endl;
|
||||
|
||||
if(!many()) {
|
||||
printf("Bug\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user