Get post number both in the loop and in the post

You can do it like this on single post page following this answer. The code may need some tweaking to meet your exact requirements.

Put this in functions.php of your theme

 class MY_Post_Numbers {

  private $count = 0;
  private $posts = array();

  public function display_count() {
      $this->init(); // prevent unnecessary queries
      $id = get_the_ID();
      echo sprintf( '<div class="post-counter">Post number<span class="num">%s</span><span class="slash">/</span><span class="total">%s</span></div>', $this->posts[$id], $this->count );
  }

  private function init() {
      if ( $this->count )
          return;
      global $wpdb;       
      $posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status="publish" AND post_type="post" ORDER BY post_date " ); // can add or change order if you want 
      $this->count = count($posts);

      foreach ( $posts as $key => $value ) {
          $this->posts[$value] = $key + 1;
      }
      unset($posts);
  }

}

$GLOBALS['my_post_numbers'] = new MY_Post_Numbers;

function my_post_number() {
  $GLOBALS['my_post_numbers']->display_count();
}

to use in template file :

<?php my_post_number(); ?>