Java与JS金额计算去掉小数部分的方法
由于除法、编程语言等特性,小数计算总是可能无法获取到精确的结果。但是金额计算又要求有精确的结果,这样的矛盾可以通过整数计算加去除小数部分来获取想要的结果。
- 乘法: 单价为9.99元的某物品购买9个,总价为89.91元。
- 除法: 总价 89.90,数量为9,通过舍去小数部分的单价为 9.98。
解决办法: 将元为单位的金额乘以100换算为分进行计算,对结果取整,除以100获得真实金额。
let price = Math.floor((89.90*100)/9)/100
JavaScript 处理方法
JavaScript 去掉小数部分的方法
常用的去掉小数部分的方法:
- Math.ceil(.6) // 向上取整,向上舍入到一个整数
- Math.floor(.6) // 向下取整,向下舍入到一个整数
- Math.round(.6) // 四舍五入,舍入到最近整数
- Number.toFixed(n) 四舍六入五成双,保留小数
toFixed它是一个四舍六入五成双的方法(也叫银行家算法),"四舍六入五成双"含义:对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
var price = 10.99;
var quantity = 7;
var needPay = parseFloat(price * quantity);
// needPay的正确结果应该是76.93元 但是运行后发现needPay为76.93000000000001
- 通过 Number.toFixed(2) 方法修正。
- 将元为单位的金额乘以100换算为分进行计算。s
var price = 10.99
var quantity = 7
var needPay = Math.floor(parseFloat(price*100 * quantity))/100;
// parseFloat(price*100 * quantity)的计算结果是7693.000000000001 使用Math.floor()方法向下取整,再除100 即为正确的结果
JavaScript 保留小数两位的方法
通过 Number.toFixed(2) 方法实现任意小数的保留
// 通过 Number.toFixed(2) 方法
var price = 10.9
var quantity = 7
var needPay = Math.floor(parseFloat(price*100 * quantity))/100;
var needPay2 = needPay.toFixed(2)
// parseFloat(price*100 * quantity)的计算结果是7693.000000000001 使用Math.floor()方法向下取整,再除100 即为正确的结果
Java 处理方法
Java 去掉小数部分的方法
- Math.round(0.6) //向上取整,向上舍入到一个整数
- Math.floor(0.6) //向下取整,向下舍入到一个整数
- Math.round(0.6) //四舍五入,舍入到最近整数
double price = 10.99;
double quantity = 7;
double needPay = Math.floor(Double.valueOf(price*100 * quantity))/100;
System.out.println(needPay);
Java 保留小数两位的方法
- DecimalFormat
- String.format("%.2f", f)
- NumberFormat
public class BigDecimalFormat {
double f = 111231.5585;
public void m1() {
BigDecimal bg = new BigDecimal(f);
double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(f1);
}
/**
* DecimalFormat 转换最简便
*/
public void m2() {
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(f));
}
/**
* String.format打印最简便
*/
public void m3() {
System.out.println(String.format("%.2f", f));
}
public void m4() {
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(f));
}
public static void main(String[] args) {
BigDecimalFormat f = new BigDecimalFormat();
f.m1();
f.m2();
f.m3();
f.m4();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构