547 typedef std::string::size_type size_type;
552 std::vector<std::string> values(m * n);
553 std::ostringstream oss;
554 std::ostringstream ossFixed;
555 std::ios_base::fmtflags original_flags = oss.flags();
558 ossFixed.setf(std::ios::fixed, std::ios::floatfield);
560 size_type maxBefore = 0;
561 size_type maxAfter = 0;
563 for (
unsigned int i = 0; i < m; ++i) {
564 for (
unsigned int j = 0; j < n; ++j) {
566 oss << (*this)[i][j];
567 if (oss.str().find(
"e") != std::string::npos) {
569 ossFixed << (*this)[i][j];
570 oss.str(ossFixed.str());
573 values[i * n + j] = oss.str();
574 size_type thislen = values[i * n + j].size();
575 size_type p = values[i * n + j].find(
'.');
577 if (p == std::string::npos) {
587 size_type totalLength = length;
591 maxAfter = (std::min)(maxAfter, totalLength - maxBefore);
600 s <<
"[" << m <<
"," << n <<
"]=\n";
602 for (
unsigned int i = 0; i < m; i++) {
604 for (
unsigned int j = 0; j < n; j++) {
605 size_type p = values[i * n + j].find(
'.');
606 s.setf(std::ios::right, std::ios::adjustfield);
607 s.width((std::streamsize)maxBefore);
608 s << values[i * n + j].substr(0, p).c_str();
611 s.setf(std::ios::left, std::ios::adjustfield);
612 if (p != std::string::npos) {
613 s.width((std::streamsize)maxAfter);
614 s << values[i * n + j].substr(p, maxAfter).c_str();
616 assert(maxAfter > 1);
617 s.width((std::streamsize)maxAfter);
627 s.flags(original_flags);
629 return (
int)(maxBefore + maxAfter);