Yas*_*jaj 3 c# java precision double
我在Java和C#中运行了相同的代码,它给出了两个不同的结果.
为什么?由于两种语言的双打具有完全相同的规格:
double是一种表示Java中64位IEEE 754浮点数的类型
double是一种表示C#中IEEE 754格式的64位双精度数的类型 .
double a = Math.pow(Math.sin(3), 2);
double b = Math.pow(Math.cos(3), 2);
System.out.println(a); // 0.01991485667481699
System.out.println(b); // 0.9800851433251829
System.out.println(a+b); // 0.9999999999999999
Run Code Online (Sandbox Code Playgroud)
double a = Math.Pow(Math.Sin(3), 2);
double b = Math.Pow(Math.Cos(3), 2);
Console.WriteLine(a); // 0.019914856674817
Console.WriteLine(b); // 0.980085143325183
Console.WriteLine(a+b); // 1
Run Code Online (Sandbox Code Playgroud)
这只是C#与该writeLine方法一起使用的精度.请参阅https://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString,其中指定G格式说明符提供15位精度.
如果你写:
Console.WriteLine(a.ToString("R"));
Run Code Online (Sandbox Code Playgroud)
它打印0.019914856674816989.