Jaka jest liczba znaczących cyfr zadeklarowanych podczas operacji matematycznych?
ta jest określona w ECMA-334 C# 4 specyfikacji 11.1.7 str.112
ułamek dziesiętny jest reprezentowany jako liczba całkowita skalowany przez potęgę dziesiątki. W przypadku liczb dziesiętnych z wartością bezwzględną mniejszą niż 1,0 m, wartość ta jest równa co najmniej 28 miejscu po przecinku. W przypadku wartości dziesiętnych z wartością bezwzględną większą niż lub równą 1,0 m, wartość jest dokładna co najmniej 28 cyfr.
Czy liczba ważnych cyfr zostanie zatrzymana podczas serializacji?
Tak to robi, z seriallization wartość, a jego precyzja nie zmienia
[Serializable]
public class Foo
{
public decimal Value;
}
class Program
{
static void Main(string[] args)
{
decimal d1 = decimal.Parse("1.0000");
decimal d2 = decimal.Parse("1.00");
Debug.Assert(d1 ==d2);
var foo1 = new Foo() {Value = d1};
var foo2 = new Foo() {Value = d2};
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("data.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, d1);
stream.Close();
formatter = new BinaryFormatter();
stream = new FileStream("data.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
decimal deserializedD1 = (decimal)formatter.Deserialize(stream);
stream.Close();
Debug.Assert(d1 == deserializedD1);
Console.WriteLine(d1); //1.0000
Console.WriteLine(d2); //1.00
Console.WriteLine(deserializedD1); //1.0000
Console.Read();
}
}
Czy obecna kultura wpływa na sposób, w jaki to obchodzić?
Obecna kultura wpływa tylko na to, jak można sparsować dziesiętne z ciągu, na przykład może obsłużyć "." lub ',' jako symbol kropki dziesiętnej specyficznej dla kultury lub symbol waluty, jeśli ją podasz, np. "123.4500 £". Kultura nie zmienia sposobu, w jaki obiekt jest przechowywany wewnętrznie i nie wpływa na jego precyzję.
Wewnętrznie, decimal has mantysa, wykładnik i znak, więc nie ma miejsca na nic innego.
Jeśli chodzi o [jak] (http://msdn.microsoft.com/en-us/library/system.decimal.aspx), robi to: "binarna reprezentacja wartości dziesiętnej składa się ze znaku 1-bitowego, 96-bitowa liczba całkowita i współczynnik skalujący używany do dzielenia 96-bitowej liczby całkowitej i określania jej części jako ułamka dziesiętnego. Współczynnik skalowania jest niejawnie liczbą 10, podniesioną do wykładnika w zakresie od 0 do 28. " - współczynnik skalowania jest komponentem dyskretnym. –
@pst - Więc czy współczynnik skalujący jest wyłącznie odpowiedzialny za ważne liczby? tj. '1.0000' to' 10000/10^4' i '1.00' to' 100/10^2' – Polynomial