你们的问题主要是“在转换为浮动点和重新注入愤怒时,有些愤怒者没有四舍五入?” 而且,由于ISO 754格式固有的精准问题。 NET用于其浮动。
如果您,则该代码为。 (C#,但在VB中运行。) NET或其中任何一种。 互联网支持的语言:
using System;
public class Program
{
public static void Main()
{
Console.WriteLine((ulong)long.MaxValue);
Console.WriteLine((ulong)(float)long.MaxValue);
}
}
最后,
9223372036854775807
9223372036854775808
通知第二号是怎样的。 如何做到这一点?
您可以安全地储存在浮动点号中的最大可能分类为:2^24
,float
和2^53
,两倍(即其红外线的借方数目,加标线的1)。 这符合你能够达到的最高精确度。 不能准确代表更多的人,因此,你可以接近。 事实上,根据:Wikipedia article on the subject:
Integers between 2^n and 2^(n+1) round to a multiple of 2^(n-23)
<代码>long.MaxValue过于庞大(其编号为<2^63-1<>>),因此没有准确储存。 而是四舍五入到<代码>2^39/代码>的多个。 页: 1 而且,这太大,难以长期适应,因此,在检查的情况下,你会例外。
If you put in 9223372036854775807
in a tool like this one, you ll see the value actually being stored is 9223372036854775808
. Just as expected.
如果这确实是一个问题,你可以使用<代码>decimal ,该编码是四级的精度编号,可以安全地安装在<2>^-1<>>>>><113/code>以下的立体:
// This Just Works (tm)
Console.WriteLine((long)(decimal)long.MaxValue);
Or you could just not use floating point numbers.
Floating point numbers aren t broken, they re just built different.