C# - 在文件中存储小数并回读

use*_*480 0 c# decimal

是否可以在文本文件中以JSON格式(字符串,对象)存储十进制值,然后将其作为十进制检索,而不必进行任何类型转换/解析等?

例如,文件也可以存储在其中的双精度数,这些不应该被解析为小数.

该文件不包含确定变量类型的其他信息:

"num1":4,

"num2":5.4,(双倍)

"num3":563.2334(十进制)

eoc*_*ron 6

是的,可以通过二进制编写器:

using(var bw = new BinaryWriter(File.OpenWrite("myFile.txt")))
{
    bw.Write(1234.01m); //there is actualy 16 bytes written to file. Double is 8 bytes long.
    bw.Write((double)5);
}
Run Code Online (Sandbox Code Playgroud)

这样您就可以避免解析其文本表示并加载到内存中:

using(var br = new BinaryReader(File.OpenRead("myFile.txt")))
{
    var myDecimal = br.ReadDecimal();//1234.01
    var myDouble = br.ReadDouble();//5
}
Run Code Online (Sandbox Code Playgroud)

您不需要任何其他数据.十进制和双精度在内存中有不同的大小:

  • 十进制是16个字节
  • Double是8个字节

因此,如果你想将你的值存储在JSON中那么糟糕,以便能够快速提取它 - >不要这样做.它可能不值得,这就是为什么:

JSON本身是可解析的格式,即使将其存储在字节数组中,它也会解析/转换它.如果您更喜欢速度而不是可读性 - 请使用其他序列化框架.例如,protobuf.