Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3310380
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 17, 20262026-05-17T21:45:12+00:00 2026-05-17T21:45:12+00:00

I ran into an unexpected result in round-tripping Int32.MaxValue into a System.Single : Int32

  • 0

I ran into an unexpected result in round-tripping Int32.MaxValue into a System.Single:

Int32 i = Int32.MaxValue;
Single s = i;
Int32 c = (Int32)s;

Debug.WriteLine(i); // 2147483647
Debug.WriteLine(c); // -2147483648

I realized that it must be overflowing, since Single doesn’t have enough bits in the significand to hold the Int32 value, and it rounds up. When I changed the conv.r4 to conv.r4.ovf in the IL, an OverflowExcpetion is thrown. Fair enough…

However, while I was investigating this issue, I compiled this code in java and ran it and got the following:

int i = Integer.MAX_VALUE;
float s = (float)i;
int c = (int)s;

System.out.println(i);  // 2147483647
System.out.println(c);  // 2147483647

I don’t know much about the JVM, but I wonder how it does this. It seems much less surprising, but how does it retain the extra digit after rounding to 2.14748365E9? Does it keep some kind of internal representation around and then replace it when casting back to int? Or does it just round down to Integer.MAX_VALUE to avoid overflow?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-17T21:45:12+00:00Added an answer on May 17, 2026 at 9:45 pm

    This case is explicitly handled by §5.1.3 of the Java Language Specification:

    A narrowing conversion of a
    floating-point number to an integral
    type T takes two steps:

    1. In the first step, the floating-point number is converted
      either to a long, if T is long, or to
      an int, if T is byte, short, char, or
      int, as follows:

      • If the floating-point number is NaN (§4.2.3), the result of the
        first step of the conversion is an int
        or long 0.
      • Otherwise, if the floating-point number is not an
        infinity, the floating-point value is
        rounded to an integer value V,
        rounding toward zero using IEEE 754
        round-toward-zero mode (§4.2.3). Then
        there are two cases:

        • If T is long, and this integer value can be represented as a
          long, then the result of the first
          step is the long value V.
        • Otherwise, if this integer value can be represented as an int,
          then the result of the first step is
          the int value V.
      • Otherwise, one of the following two cases must be true:
        • The value must be too small (a negative value of large magnitude
          or negative infinity), and the result
          of the first step is the smallest
          representable value of type int or
          long.
        • The value must be too large (a positive value of large magnitude
          or positive infinity), and the result
          of the first step is the largest
          representable value of type int or
          long.
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I ran into what was to me an unexpected result when testing a simple
I ran into this today when unit testing a generic dictionary. System.Collections.Generic.Dictionary<int, string> actual,
While creating a map of String to partial functions I ran into unexpected behavior.
I ran into the following problem in dynamically creating topics for our ActiveMQ system:
I recently endeavoured to learn about multiple threading, and ran into the following unexpected
I just ran into some unexpected behavior with DateTime.UtcNow while doing some unit tests.
I've just ran into an unexpected behaviour for Entity framework entities in use with
Ran into an Out of Stack Space error trying to serialize an ASP.Net AJAX
Ran into something interesting, want to know if I'm doing something wrong or if
I ran into an issue with an IIS web app shutting down an idle

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.