c#采用toml做配置文件的坑过
这几天在玩个程序,突然看到c#采用图toml文件,好用,直观,确实也简单。
不过。。。。。。
github上示例写的
TOML to TomlTable
TOML input file:v
EnableDebug = true
[Server]
Timeout = 1m
[Client]
ServerAddress = "http://127.0.0.1:8080"
Code:
var toml = Toml.ReadFile(filename);
Console.WriteLine("EnableDebug: " + toml.Get<bool>("EnableDebug"));
Console.WriteLine("Timeout: " + toml.Get<TomlTable>("Server").Get<TimeSpan>("Timeout"));
Console.WriteLine("ServerAddress: " + toml.Get<TomlTable>("Client").Get<string>("ServerAddress"));
Output:
EnableDebug: True
Timeout: 00:01:00
ServerAddress: http://127.0.0.1:8080
TomlTable is Nett's generic representation of a TomlDocument. It is a hash set based data structure where each key is represented as a string and each value as a TomlObject.
Using the TomlTable representation has the benefit of having TOML metadata - e.g. the Comments - available in the data model.
很好用,于是改了个float类型的参数测试测试,魔咒来了。
Console.WriteLine("ServerAddress: " + toml.Get<TomlTable>("Client").Get<float>("floatXXX"));
读取一切正常,
下一步呢?修改修改?于是看来看去有个Update函数
toml.Get<TomlTable>("Server").Update("floatXXX",(double)fV);
噩梦,于是1.1存进去变成了值 1.00999999046326,怎么测试都不对,这是什么鬼
百度https://www.baidu.com/s?ie=UTF-8&tn=62095104_35_oem_dg&wd=1.00999999046326也有这个莫名其妙的数字
百思不得其解,然后下载了https://github.com/paiden/Nett源码看看:
// Values
public static Result<TomlBool> Update(this TomlTable table, string key, bool value)
=> Update(table, key, table.CreateAttached(value));
public static Result<TomlString> Update(this TomlTable table, string key, string value)
=> Update(table, key, table.CreateAttached(value));
public static Result<TomlInt> Update(this TomlTable table, string key, long value)
=> Update(table, key, table.CreateAttached(value));
public static Result<TomlFloat> Update(this TomlTable table, string key, double value)
=> Update(table, key, table.CreateAttached(value));
public static Result<TomlOffsetDateTime> Update(this TomlTable table, string key, DateTimeOffset value)
=> Update(table, key, table.CreateAttached(value));
public static Result<TomlDuration> Update(this TomlTable table, string key, TimeSpan value)
=> Update(table, key, table.CreateAttached(value));
琢磨出点门道来了,没有float类型啊,于是改为double,一切风平浪静,回归正常。
OMG,这个。。。。
得出个结论,c#用toml文件读取非整数字请用double,不要用float,decimal倒无所谓,反正编译不过,切记不要用float。
特此记录,避免打击迷茫,也算一个玩程序中的不太有用知识点,算是记录吧。
20240420
c#采用toml做配置文件的坑过的更多相关文章
- 采用MySQL-MMM做DB高可用时,遇到的一个小坑
一.服务器分布 二.MySQL-MMM 配置 (1).公共配置[所有DB节点:Master1.Master2.Slave1.Slave2 Monitor节点] # vim /etc/mysql ...
- yaml,json,ini这三种格式用来做配置文件优缺点
适合人类编写:ini > toml > yaml > json > xml > plist可以存储的数据复杂度:xml > yaml > toml ~ jso ...
- SHELL读取 ini 格式文件做配置文件
ini文件格式一般都是由节.键.值三部分组成 格式: [第一节 ] 第一个键 = 值 第二个键 = 第二个值 [第二节 ] 第一个键 = val1,val2,val3 例子: [COM] KINGGO ...
- unknown directive "" in E:\canteen\nginx-1.16.0/conf/nginx.conf:3-------文本编辑器修改nginx配置文件的坑
nignx小白一个,今天在配置nginx的时候,理所当然的用了文本编辑器编辑并保存了一下nginx的nginx.conf配置文件,一不小心就折腾了几个钟. 保存之后就nginx -s reload一下 ...
- Java为何用xml做配置文件?
在Java世界里xml配置文件几乎是首选,xml有什么好的特性呢? xml能存储小量数据,仅仅是存储数据. xml可以跨平台,主流各种平台都对xml有支持, 真正的跨平台, xml读取速度快. xml ...
- 采用formdata做跨域的、无刷新、带进度条的文件上传
以前做无刷新上传,都要用iframe,如果想有进度条,就千难万难,不得不用flash等插件来实现. 现在HTML5终于普及了,筒子们不用再那么痛苦了. 所有这一切都变得异常简单!! 不信?且看如下代码 ...
- Java 使用json 做配置文件
概述 经常会用到通过配置文件,去配置一些参数,java里面本来是有配置文件的,但是导入很麻烦的,自从我用了json之后,从此一切配置文件都见鬼去吧. 1.下载gson解析json文件的jar包 ...
- ubuntu 上采用nginx做rtmp 直播 服务器
首先安装必要的依赖库 sudo apt-get install autoconf automake sudo apt-get install libpcre3 libpcre3-dev 安装 ...
- 2018.4.11 Java为何用xml做配置文件? 理由如下
在Java世界里xml配置文件几乎是首选,xml有什么好的特性呢? 第一:xml能存储小量数据,仅仅是存储数据. 第二:xml可以跨平台,主流各种平台都对xml有支持, 真正的跨平台, 第三:xml读 ...
- 采用localStorage做定时缓存
背景 页面采用ajax获取数据时,每访问一次就会发送一次请求向服务端获取数据,可是呢. 有些数据更新的又不频繁,所以我就想着使用localStorage进行本地存储,然后在固定间隔时在去更新数据.(下 ...
随机推荐
- hire 聘用 受雇 租金 单词记忆
hire 基本解释 vt. 聘用:录用:雇用:租用 vi. 受雇:得到工作 n. 租金:酬金,工钱:[非正式用语] 被雇佣的人:销售部的两个新雇员 来自Proto-Germanic*hurjan,租, ...
- C++学习笔记之高级语法
目录 高级语法 面向对象--类 对象的属性 运算符重载 拷贝构造函数 IO缓存 头文件的重复包含问题 深拷贝与浅拷贝 面向对象三大特性 高级语法 面向对象--类 C++使用struct.class来定 ...
- python面向对象(反射、内置方法、元类)
一 反射 # 静态语言:在执行前就定义好数据类型 # var x int=8 # 动态语言:在执行的时候,才识别数据类型 # x = 8 # 什么是反射? # 指的是在程序运行过程中可以"动 ...
- SQL奇遇记:解锁 SQL 的秘密
数据库基础 在我们探究SQL语言之旅的起点,首先要对数据库的核心理念有所了解.数据库在现代生活中无处不在,每次网购.网页浏览.即时通讯,都在产生数据.简单来说,数据库就是按一定数据结构组织.存储.管理 ...
- 01.Android线程池实践基础
目录介绍 01.实际开发问题 02.线程池的优势 03.ThreadPoolExecutor参数 04.ThreadPoolExecutor使用 05.线程池执行流程 06.四种线程池类 07.exe ...
- java 发送 http 请求练习两年半(HttpURLConnection)
1.起一个 springboot 程序做 http 测试: @GetMapping("/http/get") public ResponseEntity<String> ...
- 鸿蒙HarmonyOS实战-ArkTS语言(状态管理)
前言 状态管理是指在应用程序中维护和更新应用程序状态的过程.在一个程序中,可能有很多不同的组件和模块,它们需要共享和相互作用的状态.如果没有一个明确的方式来管理这些状态,就会导致代码混乱.不易维护和难 ...
- .Net MinimalApis响应返回值
前言 文本主要讲 MinimalApis 中的使用自定义IResultModel和系统自带IResult做响应返回值. MinimalApis支持以下类型的返回值: string - 这包括 Task ...
- C# 剪裁图片
/// <summary> /// 剪裁图片 /// </summary> /// <param name="src">原图片</para ...
- Light-Head R-CNN : 旷世提出用于加速two-stage detector的通用结构,速度达102fps
论文提出Light-Head R-CNN,一个精简的two-stage目标检测器设计准则,在表达能力很强的精简特征图上使用轻量级的R-CNN子网,不仅大量减少推理耗时,还提高了准确率,结合Xcepti ...