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进行本地存储,然后在固定间隔时在去更新数据.(下 ...
随机推荐
- jsp相对路径绝对路径
jsp相对路径绝对路径 很长一段时间纠结过JSP中的相对路径和绝对路径,也研究过一段时间,今天趁着有点时间,记下来,也有大家分享一下. 1)我们先来理解一下相对路径 首先还是我们的开始,建一个WEB项 ...
- epoll水平触发与边缘触发
把高电平看作文件描述符是可读或可写状态,低电平黑色表示不可读或不可写,epoll_wait的水平触发就是蓝色的时候epoll_wait就会被触发,而边缘触发就是红色的时候epoll_wait会触发,且 ...
- String.equals(Object anObject)方法
首先注意,equals()方法接受的是Object类型的对象,并不一定是String类型. public boolean equals(Object anObject) { //两个对象地址是否一样, ...
- 记录--从AI到美颜全流程讲解
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 美颜和短视频 美颜相关APP可以说是现在手机上的必备的软件,例如抖音,快手,拍出的"照骗"和视频不加美颜效果,估计没有 ...
- vue初学核心基础02
8.v-bind补充 8.1v-bind绑定类名 v-bind指令给"任意标签"的"任意属性"绑定数据 对于大部分的属性而言我们只需要直接赋值即可, 例如:va ...
- Spring Cloud服务之Nacos作为注册中心与配置中心
1.创建maven父工程管理jar包版本 创建maven骨架,删除多余部分文件.只留pom文件,添加依赖 <packaging>pom</packaging> <pare ...
- IDEA代码缩略图插件CodeGlance
打开IDEA设置Settings,选择Plugins,搜索CodeGlance. 点击Install,安装完成后重启即可. 效果如下:
- Java日期、字符串、毫秒值格式转换
1 /** 2 * 3 */ 4 package study.reliable; 5 /** 6 * @author : Administrator 7 * @date :2022年4月21日 下午9 ...
- 理解持续测试,才算理解DevOps
软件产品的成功与否,在很大程度上取决于对市场需求的及时把控,采用DevOps可以加快产品交付速度,改善用户体验,从而有助于保持领先于竞争对手的优势. 作为敏捷开发方法论的一种扩展,DevOps强调开发 ...
- 11.硬核的volatile考点分析
大家好,我是王有志.关注王有志,一起聊技术,聊游戏,聊在外漂泊的生活. 今天我们学习并发编程中另一个重要的关键字volatile,虽然面试中它的占比低于synchronized,但依旧是不可忽略的内容 ...