C# 中Math.Round 和 SQL Server中decimal(18,2) 不想等的问题

  1. 首先了解Math.Round方法的默认舍入规则
    • 在C#中,Math.Round方法使用的是“银行家舍入法”(也叫四舍六入五成双)。
    • 这种舍入规则是:当要舍弃的数字小于5时直接舍去;当要舍弃的数字大于5时进位;当要舍弃的数字正好是5时,如果前一位数字是偶数则舍去,如果前一位数字是奇数则进位。
  2. 分析Math.Round(0.945, 2)的情况
    • 对于0.945保留两位小数,需要看小数点后第三位数字,这里是5。
    • 此时看小数点后第二位数字,它是4(偶数)。
    • 根据“银行家舍入法”,当要舍弃的数字是5,且前一位数字是偶数时,就直接舍去,所以结果是0.94,而不是0.95。

如果想要使用传统的“四舍五入”方法,可以使用MidpointRounding.AwayFromZero枚举值,例如:

double result = Math.Round(0.945, 2, MidpointRounding.AwayFromZero);
// 此时result的值为0.95
  1. decimal(18,2)数据类型说明
    • 在数据库(如SQL Server)中,decimal(18,2)表示一种精确的数值类型。其中18是指总共可以存储的数字位数(包括小数点前后),2是指小数点后的位数。
    • 当向这种类型的字段插入或更新数据时,它会根据具体的设置来处理小数部分的截断或舍入。
  2. 默认舍入行为
    • 一般情况下,当插入或更新数据时,如果小数部分的位数超过了指定的精度(这里是小数点后2位),数据库系统(如SQL Server)会按照四舍五入的方式进行处理。
    • 例如,如果你试图插入一个值12.345decimal(18,2)类型的字段中,它会将这个值舍入为12.35
  3. 特殊情况和配置影响
    • 不过,舍入行为可能会受到数据库的配置选项、具体的数据库引擎以及所使用的操作(如插入、更新、计算等)的影响。
    • 在某些数据库系统中,可以通过设置来改变舍入模式,比如使用“截断”模式而不是四舍五入模式。但在大多数常见的数据库应用场景中,对于decimal(18,2)这种类型,默认是四舍五入来处理小数位数超出部分的情况。

如果你是在代码层面(如C#等编程语言)处理与decimal(18,2)对应的变量,舍入行为还会受到编程语言本身数据类型转换和数学运算规则的影响。在C#中,decimal类型在进行运算和转换时也会有自己的舍入规则,通常在格式化输出等场景下也是按照四舍五入来处理小数位数的显示。例如:

decimal num = 12.345m;
string formattedNum = num.ToString("F2"); 
// 这里formattedNum的值为"12.35",按照四舍五入格式化为两位小数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/60868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用分布式数据库解决慢查询问题

当使用MySQL时,我们不可避免地会遇到许多与慢查询相关的问题。 为了解决这些慢SQL的问题,我们通常需要投入大量的精力去研究执行计划、考虑合适的索引策略、精心改写SQL语句,甚至可能需要调整程序逻辑。然而,针对特定SQL的优化往…

pipx安装提示找不到包

执行&#xff1a; pipx install --include-deps --force "ansible6.*"WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConnection …

VMware 17虚拟Ubuntu 22.04设置共享目录

VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令&#xff01;&#xff01;&#xff01;<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…

uniapp ios app以framwork形式接入sentry

一、下载Sentry mac终端输入&#xff1a;vim Podfile修改Podfile: platform :ios, 11.0 target YourApp douse_frameworks! # This is importantpod Sentry, :git > https://github.com/getsentry/sentry-cocoa.git, :tag > 8.40.1 end执行&#xff1a;pod install下载…

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

全文链接&#xff1a;https://tecdat.cn/?p38224 分析师&#xff1a;Duqiao Han 股票市场是一个复杂的非线性系统&#xff0c;股价受到许多经济和社会因素的影响。因此&#xff0c;传统的线性或近线性预测模型很难有效、准确地预测股票指数的价格趋势。众所周知&#xff0c;深…

Linux kvm环境搭建

1.1 安装KVM虚拟机 #系统是否支持KVM虚拟化 [rootjztserver01 ~]# cat /proc/cpuinfo | egrep vmx|svm [rootjztserver01 ~]# egrep (vmx|svm) /proc/cpuinfo |wc -l #关闭selinux&#xff1b;设置selinux立即生效 [rootjztserver01 ~]# vi /etc/sysconfig/selinux [rootjztse…

2020年计挑赛往届真题(C++)

因为17号要开赛了&#xff0c;甚至是用云端编辑器&#xff0c;debuff拉满&#xff0c;只能临时抱佛脚了 各个选择题的选择项我就不标出来了&#xff0c;默认ABCD排&#xff0c;手打太麻烦了 目录 单选题&#xff1a; 1.阅读以下语句:double m0;for(int i3;i>0;i--)m1/i;…

2 的幂算法

给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;tr…

ubuntu20.04默认的python3.8升级到python3.10

Python 3.8 于 2019 年 10 月发布&#xff0c;距今已有五年时间。2024 年 10 月是 Python 3.8 版本发布的最后一个月&#xff0c;从 2024 年 10 月开始&#xff0c;如果存在安全错误&#xff0c;Python 开发团队将不会修复该错误。有必要把python3.8升级python3.10。 新加apt源…

CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试

在Windows操作系统中&#xff0c;Process Environment Block (PEB&#xff0c;进程环境块) 是一个包含特定进程信息的数据结构。它可以被用于反调试中 如何获取PEB指针&#xff1f; 在Windows操作系统中&#xff0c;获取PEB指针的常见方法主要有以下几种。&#xff1a; 1. 使…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同&#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式&#xff0c;如上图&#xff1a;层序遍历的…

RHEL/CENTOS 7 ORACLE 19C-RAC安装(纯命令版)

一 首先需要安装两个CENTOS 7虚拟机(此处省略)。 由于我们是要安装ORCLE-RAC双节点集群所以至少每个CENTOS虚拟机上需要两块网卡&#xff0c;并且两块网卡都是HOST-ONLY具体步骤请看视频一《为虚拟机添加网卡》 这里大家需要注意的是&#xff0c;我们需要绑定两台机器的IP一共…

DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能

DevOps的兴起&#xff0c;得益于敏捷软件开发的普及与IT基础设施代码化管理的革新。敏捷宣言虽已解决了研发流程中的诸多挑战&#xff0c;但代码开发仅是漫长价值链的一环&#xff0c;开发前后的诸多问题仍亟待解决。与此同时&#xff0c;虚拟化和云计算技术的飞跃&#xff0c;…

ubuntu24.04设置开机自启动Eureka

ubuntu24.04设置开机自启动Eureka 之前我们是在/root/.bashrc的文件中增加了一条命令 nohup java -jar /usr/software/eurekaServer-auth-prd-03.jar > /usr/software/log.log 2>&1 &但上面这条命令只有在登录root的用户时&#xff0c;才会执行&#xff0c;如果…

python json详解

json 是 Python 中用于处理 JSON 数据的标准库。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人类阅读和编写&#xff0c;同时也易于机器解析和生成。Python 的 json 模块提供了将 Python 对象与 JSON 数据相互转换的功…

WPS宏编辑器开发,单元格内容变更自动触发事件

WPS中Excel的“触发器” 写在前面宏的开发1、切换宏编辑器开发环境2、小练习&#xff1a;自定义函数3、完成功能需求&#xff1a;单元格内容变更自动触发事件 总结 写在前面 我先生用EXCEL做了一张学生存款表。设计得很简单&#xff0c;A学生已存款X元&#xff0c;A学生再次存…

新版Apache Tomcat ⽬目录文件讲解(笔记)

简介&#xff1a;Tomcat⽬目录⽂文件讲解 bin &#xff08;关注&#xff09; 启动和关闭tomcat脚本 startup.sh/startup.bat (Linux平台或Mac上的启动脚本/Windows平台上的启动脚本) shutdown.sh/shutdown.bat (Linux平台或Mac上的关闭脚本/Windows平台上的关闭脚本) conf&am…

java Arrays 详解

Java Arrays 类详解 Arrays 是 Java 中一个专门用于操作数组的工具类&#xff0c;位于 java.util 包中。它提供了多种用于数组操作的方法&#xff0c;例如排序、搜索、填充、比较、转换等。 1. 常用方法分类 1.1 排序 方法描述Arrays.sort(array)对数组进行升序排序&#xf…

Go 语言已立足主流,编程语言排行榜24 年 11 月

Go语言概述 Go语言&#xff0c;简称Golang&#xff0c;是由Google的Robert Griesemer、Rob Pike和Ken Thompson在2007年设计&#xff0c;并于2009年11月正式宣布推出的静态类型、编译型开源编程语言。Go语言以其提高编程效率、软件构建速度和运行时性能的设计目标&#xff0c;…

一个win32 / WTL下多线程库(CThread类)的使用心得

说是多线程库&#xff0c;其实就是一个单独的.h文件&#xff0c;可以方便的放入WTL/win32工程中。 下载地址&#xff1a;CThread. 里面也简单介绍了 用法。 具体用法&#xff0c;首先自定义一个子线程类继承CThreadImpl<T>&#xff0c;注意他是个模板类。 class CMySu…