首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CInt不会一致地舍入Double值 - 如何删除小数部分?

当你需要删除小数部分时,可以使用以下方法:

  1. 使用 Int 函数:
代码语言:vb
复制
Dim num As Double = 12.34
Dim intNum As Integer = Int(num)
  1. 使用 Fix 函数:
代码语言:vb
复制
Dim num As Double = 12.34
Dim intNum As Integer = Fix(num)
  1. 使用 CInt 函数:
代码语言:vb
复制
Dim num As Double = 12.34
Dim intNum As Integer = CInt(num)

在这种情况下,CInt 函数会将 Double 值舍入为最接近的整数值,而不是向零舍入。这是因为 CInt 函数在舍入时使用了银行家舍入法,它会将大于等于 0.5 的数值向上舍入,而小于 0.5 的数值向下舍入。

如果你想要删除小数部分,可以使用以上方法中的任何一种。这些方法都会将小数部分删除,并将结果转换为整数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL函数 ROUND

在 ROUND 循环或截断操作后删除尾随零。不返回前导零。如果 scale 为正数,则在小数点右侧的该位数处进行舍入。如果 scale 等于或大于小数位数,则不会发生舍入或零填充。...如果 scale 为零,则舍入到最接近的整数。换句话说,在小数点右边的零位处进行舍入;所有小数位和小数点本身都被删除。如果 scale 为负数,则在小数点左侧的该位数处进行舍入。...如果 scale 等于或大于舍入结果中的整数位数,则返回零。如果 numeric-expr 为零(但表示为:00.00、-0 等),ROUND将返回 0(零)且没有小数位,而不管比例如何。...ROUND 舍入(或截断)到指定数量的小数位数,但其返回始终是标准化的,删除尾随零。例如,ROUND(10.004,2) 返回 10,而不是 10.00。TRUNCATE 截断到指定数量的小数位数。...当 $DOUBLE 被输入到带有刻度舍入标志(flag = 0,默认)的 ROUND 时,返回通常包含比刻度中指定的更多的小数位数,因为小数位数的结果不能用二进制表示,所以返回必须四舍五入到最接近的可表示的

5.4K31

Kotlin BigDecimal 精确计算

setScale(2) //表示保留2位小数,默认是四舍五入方式 setScale(2, BigDecimal.ROUND_DOWN) //删除多余的小数位,例如:2.125 → 2.12 setScale...在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。 注意,此舍入模式始终不会减少计算的大小。 ROUND_DOWN 接近零的舍入模式。...在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。 注意,此舍入模式始终不会增加计算的大小。 ROUND_CEILING 接近正无穷大的舍入模式。...如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同; 如果为负,则舍入行为与 ROUND_DOWN 相同。 注意,此舍入模式始终不会减少计算。...注意,此舍入模式始终不会增加计算。 ROUND_HALF_UP 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入舍入模式。

4.5K20

SQL函数 TRUNCATE

描述TRUNCATE通过从小数点开始按小数位数截断NUMERIC-EXPR。它不对数字进行四舍五入,也不添加填充零。在截断操作之前,将删除前导零和尾随零。...如果小数位数为正数,则在小数点右侧的位数处执行截断。如果小数位数等于或大于小数位数,则不会发生截断或零填充。如果Scale为零,则该数字将被截断为整数。...ROUND 舍入(或截断)到指定数量的小数位数,但其返回始终是标准化的,删除尾随零。例如,ROUND(10.004,2) 返回 10,而不是 10.00。...当舍入到固定的小数位数很重要时使用 $JUSTIFY - 例如,在表示货币金额时。 $JUSTIFY 在舍入操作之后返回指定数量的尾随零。当要舍入的位数大于小数位数时,$JUSTIFY 补零。...$JUSTIFY 不会截断。示例以下两个示例都将数字截断为两位小数

1.2K10

基础类型BigDecimal简介

/ 含有小数部分 /含有指数部分/指数部分含有符号 除非有必要 否则在你需要 将 float 或 double 转换为 BigDecimal时 首选BigDecimal(String val)...构造方法与 Float.toString(float) 和 Double.toString(double) 返回的兼容 它不会遇到 BigDecimal(double) 构造方法的不可预知问题 常量.../ divisor) 的整数部分准确商的整数部分舍入模式无关所以舍入模式不影响此方法返回的首选标度是 (this.scale() - divisor.scale())如果准确商的整数部分需要的位数多于...setScale 系列并不是设置BigDecimal的scale  BigDecimal是不可变得 setScale 是一个转换器,将参数的BigDecimal转换为指定标度的 本身不会变化,...的小数部分此转换会丢失关于 BigDecimal 的精度信息 XXXValueExact byte byteValueExact()转换为 byte如果此 BigDecimal 具有非零小数部分

1.9K41

BigDecimal加减乘除计算

类型的,double类型小数计算不精准。...因为不是所有的浮点数都能够被精确的表示成一个double 类型,有些浮点数值不能够被精确的表示成 double 类型,因此它会被表示成与它最接近的 double 类型的。...在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。 注意,此舍入模式始终不会减少计算的大小。 2、ROUND_DOWN 接近零的舍入模式。...在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。 注意,此舍入模式始终不会增加计算的大小。 3、ROUND_CEILING 接近正无穷大的舍入模式。...注意,此舍入模式始终不会增加计算。 5、ROUND_HALF_UP 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入舍入模式。

1.5K20

不掌握这些坑,你敢用BigDecimal吗?

其中涉及到参数类型为double的构造方法,会出现上述的问题,使用时需特别留意。 第二:浮点精度的坑 如果比较两个BigDecimal的是否相等,你会如何比较?...注意,此舍入模式始终不会减少计算的大小。 RoundingMode.DOWN:接近零的舍入模式。在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。...注意,此舍入模式始终不会增加计算的大小。 RoundingMode.CEILING:接近正无穷大的舍入模式。...如果 BigDecimal 为正,则舍入行为与 ROUNDUP 相同;如果为负,则舍入行为与 ROUNDDOWN 相同。注意,此舍入模式始终不会减少计算。...注意,此舍入模式始终不会增加计算。 RoundingMode.HALF_UP:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入舍入模式。

1.3K10

【蓝桥杯Java_C组·从零开始卷】第五节(二)、BigDecimal的使用

解释:始终对非零舍弃部分前面的数字加 1。注意,此舍入模式始终不会减少计算的绝对。...解释:从不对舍弃部分前面的数字加 1(即截尾)。注意,此舍入模式始终不会增加计算的绝对。...解释:如果结果为正,则舍入行为类似于 RoundingMode.UP;如果结果为负,则舍入行为类似于RoundingMode.DOWN。注意,此舍入模式始终不会减少计算。...解释:如果结果为正,则舍入行为类似于 RoundingMode.DOWN;如果结果为负,则舍入行为类似于RoundingMode.UP。注意,此舍入模式始终不会增加计算。...此舍入模式类似于 Java 中对float 和double 算法使用的舍入策略。

1.1K20

Java中的BigDecimal详解

这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的不会正好等于 0.1(虽然表面上等于该)。        ...原因还是在于二进制无法精确地表示某些十进制小数,因此1023.99999999999999在编译之后的double变成了1024。...所以,把double强制转化成int确实是扔掉小数部分,但是你写在代码中的,并不一定是编译器生成的真正的double。...   //向负无穷方向舍入 ROUND_HALF_DOWN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,  如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5                  ...,使用ROUND_HALF_DOWNROUND_HALF_UP    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6

53820

Java基础知识点笔记(一):java中的取整与四舍五入

今天编码时,需要对数据进行保留两位小数处理,结果卡壳了,百度了一下解决掉后,结果返回到前端的不是预想,特此整理,以备后续遗忘。...,取整数部分;直接强制取整有精度风险,一方面是小数位损失,另一方面当浮点型数字超过整型数字最大时,会发生溢出。...num)函数是取整函数,该函数只关注小数点后第一位小数值,具体规则如下: (1).参数的小数点后第一位5,运算结果为参数整数部分绝对+1,符号(即正负)不变。 (3).参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。...向绝对最大的方向舍入,只要舍弃位非0即进位。 (2).ROUND_DOWN:趋向零方向舍入。向绝对最小的方向输入,所有的位都要舍弃,不存在进位情况。

2.7K50

java 中对 BigDecimal 类使用详解

只能无限接近于那个 举例: 以上可以看出,两个小数相加,得到的的精度缺失 2 BigDecimal是什么?...这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的不会正好等于 0.1(虽然表面上等于该)。...,必须要多传两个参数 divide(BigDecimal,保留小数点后几位小数舍入模式) 6.1 舍入模式 ROUND_CEILING //向正无穷方向舍入 ROUND_DOWN //向零方向舍入...ROUND_FLOOR //向负无穷方向舍入 ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为...设置 保留几位小数 第二个参数是 设置舍入模式 ROUND_CEILING //向正无穷方向舍入 ROUND_DOWN //向零方向舍入 ROUND_FLOOR //向负无穷方向舍入

1.1K30

BigDecimal类

我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:2.4的二进制表示并非就是精确的2.4。...这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的不会正好等于 0.1(虽然表面上等于该)。...当double必须用作BigDecimal的源时,请使用Double.toString(double)转成String,然后使用String构造方法,或使用BigDecimal的静态方法valueOf,...//向负无穷方向舍入 ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 ROUND_HALF_EVEN...//向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6 ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式 ROUND_UP

97310

CSAPP第二章(下)

数据的大小会变化,但是位模式不会变。也就是之前每一位上的数据在转换之后,每一位上该是0是0,该是1是1。...浮点型数据 类比于十进制小数小数点前面的数是10的n次方来算,小数点后面的数按10的-n次方来算。 对于二进制数来说,小数点前面的是2的n次方,小数点后面的是2的-n次方。...单精度的类型有32位 分为三部分 1 8 23 分别对应S E M ,符号,阶码,尾数。 公式为: ? 对于阶码E有三种不同的情况: 规格化 非规格化 特殊。...1 2 2 2 -2 向零舍入 1 1 1 2 -1 向下舍入 1 1 1 2 -2 向上舍入 2 2 2 3 -1 浮点数的强制转换 从int转换为float,数字不会溢出,但可能会被舍入。...从int或float转换成double,可以保留精确的数值。 从double转换成float可能溢出,还有可能被舍入。 float或double转换int,将会向零舍入

57650

BigDecimal

BigDecimal非常适用于需要高精度计算的场合,如货币计算、科学计算、精确计算等,它可以处理非常大的数据,不会出现精度丢失或舍入问题。...为什么不使用double 类型进行高精度计算? Java内置了double和float两种浮点数类型,它们在对于小数的计算上都有很好的支持。...但是,在进行高精度计算时,我们很快就会发现double数据类型存在精度问题,这是由于二进制无法精确表示所有的十进制数,例如 0.1 这个小数在二进制表示中是一个无限循环的小数。...请注意,两个BigDecimal对象的相等性和它们的以及小数点后面的精度有关。...setScale() setScale()方法可以设置BigDecimal的标度(小数点后的位数),并指定舍入模式,例如: BigDecimal a = new BigDecimal("10.1234

27120

Java 三元运算符 实现 四舍五入

编程:double d; 用表达式表示d四舍五入后的int结果 (四舍五入:小数点后面的第一位小于等于4,直接舍弃,大于4向前进一位再舍弃。...本文将介绍如何使用Java的三元运算符来实现四舍五入,以下是相关内容的整理: 摘要 本文将介绍如何利用Java的三元运算符来实现数字的四舍五入操作。...当条件成立时,返回表达式1的;否则,返回表达式2的。 实现四舍五入: 要实现四舍五入,首先将原始数字加上0.5,然后使用三元运算符判断小数部分是否大于等于0.5,如果是则进位,否则舍去。...b : c; System.out.println("四舍五入后的结果: a = " + a); } } 方案二: 1.四舍五入时可以用到int类型,它的得到的是整数,舍弃小数部分。...b; } else return b; } 注意事项 在使用三元运算符进行四舍五入时,需要注意数值的正负情况,以及小数部分的处理

20630

java 中 BigDecimal 详解「建议收藏」

BigDecimal(double) 创建一个具有参数所指定双精度的对象。 //不推荐使用 BigDecimal(long) 创建一个具有参数所指定长整数值的对象。...这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的不会正好等于 0.1(虽然表面上等于该)。...,必须要多传两个参数 divide(BigDecimal,保留小数点后几位小数舍入模式) 舍入模式 ROUND_CEILING //向正无穷方向舍入 ROUND_DOWN //向零方向舍入...ROUND_FLOOR //向负无穷方向舍入 ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为...ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入” ROUND_UNNECESSARY

73120

BigDecimal使用总结

另外建议数值运算使用字符串的方式创建对象,因为: BigDecimal c = new BigDecimal(1.2); System.out.println(c); JDK的描述: 1、参数类型为double...这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的不会正好等于 0.1(虽然表面上等于该)。...intValue() 3.保留小数 在进行除法运算的时候,针对可能出现的小数产生的计算,必须要多传两个参数 divide(BigDecimal,"保留小数点后几位小数","...//向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边...(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入” ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式 ROUND_UP

82630
领券