рдбрдмрд▓ рд╕реЗ рдлреНрд▓реЛрдЯ рдпрд╛ "рдкреЗрдиреА рдХрд╣рд╛рдБ рдЧрдпрд╛?"

рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рди рдЦреЛрдирд╛, рдЕрд░реНрдерд╛рддред рдПрдХ рдЫреЛрдЯреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд▓реЗрдХрд░ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд╛рд▓ рддрдХред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдкрд┐рдЫрд▓реЗ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдбрдмрд▓ рд╕реЗ рдлреНрд▓реЛрдЯ рдФрд░ рдкреЗрдиреА рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЧрд╛рдпрдм рд╣реЛрдиреЗ рд▓рдЧреЗ?
рдпрд╣ рд▓реЗрдЦ рдЬрд╛рд╡рд╛ рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдирдВрдмрд░реЛрдВ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдкрдбрд╝рддрд╛рд▓ рдХрд░рддрд╛ рд╣реИ:
99999999.33333333 -> 100000000.0000000 98888888.33333333 -> 98888888.0000000 2974815.78000000 -> 2974815.7500000 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рд╕ рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдирдВрдмрд░ рдлреНрд▓реЛрдЯ рдФрд░ рдбрдмрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдпреЛрдВ рд╕реЗ рджреВрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреЛ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рдмрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреБрд░рдВрдд рдХреЛрдб, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╣рд▓реЗ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдЯреИрдХреНрд╡реЗрд░рдлрд╝реНрд▓реЛ рдкрд░ рдПрдХ рдЪрд░реНрдЪрд╛ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рддрд╣рдд, рдпрд╣ рдХреБрдЫ рдФрд░ рдкреЗрдЪреАрджрд╛ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред
 public class Main { static void testDoubleToFloat(double d) { float f = (float) d; System.out.println(); System.out.println(String.format("double %.10f\t%s", d, Long.toBinaryString(Double.doubleToRawLongBits(d)))); System.out.println(String.format("float %.10f\t %s", f, Integer.toBinaryString(Float.floatToRawIntBits(f)))); } public static void main(String[] args) { System.out.println(String.format("double: %.10f / %.10f", Double.MIN_VALUE, Double.MAX_VALUE)); System.out.println(String.format("float: %.10f / %.10f", Float.MIN_VALUE, Float.MAX_VALUE)); /*  ,        double. */ testDoubleToFloat(99999999.0 + 1.0 / 3.0); //   testDoubleToFloat(98888888.0 + 1.0 / 3.0); //     testDoubleToFloat(2974815.78); testDoubleToFloat(-2974815.78); } } 

рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рдгрд╛рдо
 double: 0.0000000000 / 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000 float: 0.0000000000 / 340282346638528860000000000000000000000.0000000000 double 99999999.3333333300 100000110010111110101111000001111111101010101010101010101010101 float 100000000.0000000000 1001100101111101011110000100000 double 98888888.3333333300 100000110010111100100111011001011100001010101010101010101010101 float 98888888.0000000000 1001100101111001001110110010111 double 2974815.7800000000 100000101000110101100100010111111100011110101110000101000111101 float 2974815.7500000000 1001010001101011001000101111111 double -2974815.7800000000 1100000101000110101100100010111111100011110101110000101000111101 float -2974815.7500000000 11001010001101011001000101111111 

рдХреЗ рдмрд░рд╛рдмрд░
 /opt/jdk1.7/bin/java -version java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) 

рдФрд░ рдХреЗ рд▓рд┐рдП
 java -version java version "1.7.0_25" OpenJDK Runtime Environment (IcedTea 2.3.12) (7u25-2.3.12-4ubuntu3) OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) 


рд░реВрдкрд╛рдВрддрд░рдг рд╡рд┐рдзрд┐


рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрдорд╛рдг рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдбрдмрд▓ рдХреЛ рдлреНрд▓реЛрдЯ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
 public class Main { static void testDoubleToFloat(double d) { float f = (float) d; Float f2 = new Float(d); float f3 = Float.parseFloat(new Double(d).toString()); float f4 = Float.parseFloat(String.format("%.10f", d)); System.out.println(); System.out.println(String.format("double %.10f\t%s", d, Long.toBinaryString(Double.doubleToRawLongBits(d)))); System.out.println(String.format("float %.10f\t %s", f, Integer.toBinaryString(Float.floatToRawIntBits(f)))); System.out.println(String.format("Float %.10f\t %s", f2, Integer.toBinaryString(Float.floatToRawIntBits(f2)))); System.out.println(String.format("float %.10f\t %s", f3, Integer.toBinaryString(Float.floatToRawIntBits(f3)))); System.out.println(String.format("float %.10f\t %s", f4, Integer.toBinaryString(Float.floatToRawIntBits(f4)))); } public static void main(String[] args) { System.out.println(String.format("double: %.10f / %.10f", Double.MIN_VALUE, Double.MAX_VALUE)); System.out.println(String.format("float: %.10f / %.10f", Float.MIN_VALUE, Float.MAX_VALUE)); testDoubleToFloat(99999999.0 + 1.0 / 3.0); testDoubleToFloat(98888888.0 + 1.0 / 3.0); testDoubleToFloat(2974815.78); testDoubleToFloat(-2974815.78); } } 

рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рдгрд╛рдо
  double: 0.0000000000 / 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000 float: 0.0000000000 / 340282346638528860000000000000000000000.0000000000 double 99999999.3333333300 100000110010111110101111000001111111101010101010101010101010101 float 100000000.0000000000 1001100101111101011110000100000 Float 100000000.0000000000 1001100101111101011110000100000 float 100000000.0000000000 1001100101111101011110000100000 float 100000000.0000000000 1001100101111101011110000100000 double 98888888.3333333300 100000110010111100100111011001011100001010101010101010101010101 float 98888888.0000000000 1001100101111001001110110010111 Float 98888888.0000000000 1001100101111001001110110010111 float 98888888.0000000000 1001100101111001001110110010111 float 98888888.0000000000 1001100101111001001110110010111 double 2974815.7800000000 100000101000110101100100010111111100011110101110000101000111101 float 2974815.7500000000 1001010001101011001000101111111 Float 2974815.7500000000 1001010001101011001000101111111 float 2974815.7500000000 1001010001101011001000101111111 float 2974815.7500000000 1001010001101011001000101111111 double -2974815.7800000000 1100000101000110101100100010111111100011110101110000101000111101 float -2974815.7500000000 11001010001101011001000101111111 Float -2974815.7500000000 11001010001101011001000101111111 float -2974815.7500000000 11001010001101011001000101111111 float -2974815.7500000000 11001010001101011001000101111111 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рднрд╛рд╡ "рдирдпрд╛ рдлреНрд▓реЛрдЯ (рдбреА)" рдФрд░ "(рдлреНрд▓реЛрдЯ) рдбреА" рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓рд╛ рджреВрд╕рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
 /* * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ ... public final class Float extends Number implements Comparable<Float> { ... public Float(double value) { this.value = (float)value; } ... } 

рдпрджрд┐ рд╣рдо рдлрд╝реНрд▓реЛрдЯ.рдкрд░рд╕реЗрдлрд╝реНрд▓реЛрдЕрдЯ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ:
  return (float)Double.longBitsToDouble( lbits ); 

рдЬреЛ, рдареАрдХ рдЙрд╕реА рддрд░рд╣, рдПрдХ рдбрдмрд▓ рдЪрд░ рдХреЛ рдПрдХ рдлреНрд▓реЛрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐, рдХрдо рд╕реЗ рдХрдо рдУрдкрдирдЬреЗрдбрдХ рдореЗрдВ, рдбрдмрд▓ рдлреНрд▓реЛрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВ:
 float f = (float) d; 

рдлреНрд▓реЛрдЯ рдФрд░ рдбрдмрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░рд╛рд░реВрдк


рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ Long.toBinaryString рдХреЛ рдбрдмрд▓ рдФрд░ Integer.toBinaryString рдХреЗ рд▓рд┐рдП рдлреНрд▓реЛрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд┐рдд рдЪрд░ рдХреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рднрдВрдбрд╛рд░рдг рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ред рдЗрд╕ рдкрд░ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ ( рдЖрдкрдХреЛ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ , рдЬреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рд╡рд┐рдХреА рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрдиреБрд╡рд╛рдж рдмрди рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджреЛрд╣рд░реА рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рдЧреЛрд▓рд╛рдИ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ:
  double 2974815.7800000000 100000101000110101100100010111111100011110101110000101000111101 float 2974815.7500000000 1001010001101011001000101111111 

рдбрдмрд▓ рдкреНрд░рдХрд╛рд░ 64 рдмрд┐рдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдлреНрд▓реЛрдЯ рдкреНрд░рдХрд╛рд░ 32, рд▓реЗрдХрд┐рди рд╣рдо 63 рдФрд░ 31 рдЕрдХреНрд╖рд░ рджреЗрдЦрддреЗ рд╣реИрдВ - рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рд░рд╣рдиреЗ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
  double 2974815.7800000000 0 10000010100 0110101100100010111111100011110101110000101000111101 float 2974815.7500000000 0 10010100 01101011001000101111111 

рдкрд╣рд▓реА рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рдлрд┐рд░ 11 (рдбрдмрд▓ рдХреЗ рд▓рд┐рдП) рдпрд╛ 8 рдмрд┐рдЯреНрд╕ (рдлреНрд▓реЛрдЯ рдХреЗ рд▓рд┐рдП) рдкреНрд░рддрд┐рдкрд╛рджрдХ рд╣реИред рдХреЗ рдмрд╛рдж - рдордВрдЯрд┐рд╕рд╛, рдЬреЛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реА рдзрд╛рд░рдгрд╛: 23 рд╡реАрдВ рдмрд┐рдЯ рдХреЗ рдмрд╛рдж рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдПрдВ рдмрд╕ рдЦреЛ рдЬрд╛рддреА рд╣реИрдВ рдЬрдм рдбрдмрд▓ рд╕реЗ рдлреНрд▓реЛрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдкрд╣рд▓реЗ рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рджреНрд╡рд┐рдЖрдзрд╛рд░реА 0110 1011 0010 0010 1111 1110 0011 1101 0111 0000 1010 0011 рд╕реЗ рдкрд┐рдЫрд▓реЗ 29 рдЕрдВрдХреЛрдВ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдлреНрд▓реЛрдЯ рдореЗрдВ 011 0101 1001 0001 0111 1111 рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдирдВрдмрд░ рджреЗрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдирдВрдмрд░реЛрдВ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рдЧреИрд░-рддреБрдЪреНрдЫ рдиреБрдХрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрд╡рдпрдВ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдбрдмрд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлреНрд▓реЛрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рдбрдмрд▓ рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред рдФрд░ рдкреИрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП BigDecimal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдПрдХ рдкреИрд╕рд╛ рди рдЦреЛрдПрдВред

рдкреБрдирд╢реНрдЪ


OpenJDK рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдЧ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╕рдХрд░ рдЗрд╕ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд╛рдпрд╛ рдЧрдпрд╛:

рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдХрд╣рддрд╛ рд╣реИ:
рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛:
рдордзреНрдпрд╡рд░реНрддреА рдбрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдЯреВ-рдлреНрд▓реЛрдЯ рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдмрдЪрдирд╛ред


рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди


  1. BigDecimal рдмреИрдВрдХреЛрдВ рдореЗрдВ рдкреИрд╕реЗ рдЬрдорд╛ рдХрд░реЗрдВ:
      BigDecimal bg = new BigDecimal("2974815.78"); System.out.println(bg); 

  2. рдореБрджреНрд░рд╛ рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░ рд╕реЗ:
     class Currency { long value; ... public double asDouble() { return value / 100.0; } ... <   ,  ..   , ,  StringTokenizer> ... } 

    рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдгрдп рдореЗрдВ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ / рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред

Source: https://habr.com/ru/post/In201066/


All Articles