小程序保留2位小数据,不四舍五入

文章讨论了在JavaScript中使用parseInt+toFixed、Math.floor+toFixed和parseFloat进行数值转换时遇到的问题,指出parseInt可能导致精度丢失,而parseFloat在保留两位小数时表现更准确。
摘要由CSDN通过智能技术生成

目录

 方法1: parseInt + toFixed

方法2:Math.floor + tofixed

### 方法3:parseFloat() ,较为准确==》


 

 方法1: parseInt + toFixed
/*
* 保留2位小数,不四舍五入
* 5.992550 =>5.99 , 2 => 2.00
* */
const toFixed2Decimal = (value) => {
  return (parseInt(value*100)/100).toFixed(2)
}
console.log(587.67*100)
console.log(toFixed2Decimal(587.67))
console.log(toFixed2Decimal(-0.1123456))
console.log(toFixed2Decimal(-1))
console.log(toFixed2Decimal('-12.999'))
console.log(toFixed2Decimal('-12.99999'))
module.exports = {
  toFixed2Decimal: toFixed2Decimal
}

输出 :

58766.99999999999
587.66

-0.11
-1.00
-12.99
-12.99

 有问题: 587.67 转换之后 587.66 

方法2:Math.floor + tofixed
const toFixed2Decimal = (value) => {
  return (Math.floor(value*100)/100).toFixed(2)
}

console.log(toFixed2Decimal(-0.1123456))
console.log(toFixed2Decimal(-1))
console.log(toFixed2Decimal('-12.999'))
console.log(toFixed2Decimal('-12.99999'))

输出:

-0.12
-1.00
-13.00
-13.00  

有问题-12.99 得出-13.00 

想哭啊。2种方法出来的钱的值都不对。

### 方法3:parseFloat() 

const toFixed2Decimal2 = (value) => {
  return (parseFloat(value * 100) / 100).toFixed(2)
}
console.log(toFixed2Decimal2(67.49))
console.log(toFixed2Decimal2(5.992550))
console.log(toFixed2Decimal2(2))
console.log(toFixed2Decimal2(12.99))

返回的值都是正确的。

目前稍微准确的转换,保留2个小数。 

QT中的“四舍六入五成双”设置主要用于在处理浮点数运算时,决定当进行数字截断或近似转换时应采取的规则。这种规则对于提高计算的准确性和一致性至关重要,尤其是在需要高精度计算的场景下。下面是对这个术语的解释及其实现在QT中的方法: ### “四舍六入五成双”的含义 - **四舍**:如果数字的最后一位小于5,则直接去掉此位及之后的所有位。 - **六入**:如果数字的最后一位大于等于6,则增加前一位数字的大小后再去掉所有后续位。 - **五成双**:如果最后一位正好是5,那么要看去掉该位后,前一位是否已经是偶数(即能被2整除)。如果是偶数,则保持不变;如果不是,则向上进一。 ### 在QT中的应用 在QT中,你可以通过调整`QDoubleValidator`类的行为来自定义输入验证规则,包括选择“四舍六入五成双”的方法。以下是如何实现这一点的一个例子: 1. 首先,导入必要的头文件: ```cpp #include <QDoubleValidator> #include <QApplication> #include <QLineEdit> ``` 2. 然后,创建一个`QDoubleValidator`实例,并设置它的规则: ```cpp double minimumValue = 0.0; double maximumValue = 100.0; int decimals = 2; // 指定最多保留的小数位数 bool localeAware = true; // 根据本地设置进行验证(通常是不需要的) QDoubleValidator* validator = new QDoubleValidator(minimumValue, maximumValue, decimals); validator->setNotation(QDoubleValidator::StandardNotation); validator->setLocale(QLocale()); validator->setBottom(0); // 如果需要非负数 // 自定义“四舍六入五成双” validator->setLocale(QLocale(QLocale::Chinese)); // 更改到中文区域设置以匹配“四舍六入五成双” validator->setNotation(QDoubleValidator::ScientificNotation); // 改为科学计数法,方便展示结果 ``` 需要注意的是,“四舍六入五成双”在标准的`QDoubleValidator`类上默认是不可配置的,这里的设置是为了演示如何在中文环境下展示数字规则。实际的“四舍六入五成双”规则是在进行数学运算时自动应用的,而不是在输入验证阶段设置。在大多数实际应用中,开发者更关心的是如何将用户输入的数据转换为符合特定规则的形式(如四舍五入),这可以在接收输入数据时手动实现或使用额外的数学库函数完成。 ### 相关问题: 1. **如何在QT中实现更复杂的输入验证规则?** 除了`QDoubleValidator`,还可以探索使用`QStringValidator`和其他验证器来满足更复杂的需求。 2. **在QT中如何高效处理大规模数据集?** 采用多线程处理、内存管理优化以及算法优化技术可以有效地处理大规模数据集。 3. **如何在QT中实现动态UI布局适应多种屏幕尺寸?** 使用`QBoxLayout`, `QFormLayout`, 和 `QSplitter`等布局管理器,并结合`resizeEvents`和`geometryChanged`信号,可以帮助程序适应不同设备的屏幕尺寸。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值