-
2022-05-05 17:41:11
目录
为什么要用BigDecimal ?
商业计算中,货币类或者小数点运算涉及到精度问题,BigDecimal解决高精度问题,保证数值正确。 对比float/double更偏向工程及科学运算,二进制浮点运算,在更广的数值上得到近似计算规律,但是涉及到钱等则需要准确的结果,故使用BigDecimal。
构造BigDecimal
BigDecimal(int)、BigDecimal(double)、BigDecimal(long)、BigDecimal(String)
创建一个整型/双精度/长整型/字符串数字初始值
一般使用BigDecimal(String)来初始化值,因为BigDecimal(double)无法控制精度
BigDecimal a = new BigDecimal("0.01");
加减乘除
均创建新的对象而非在原来基础上改变数值
加法add
BigDecimal a = new BigDecimal("0.01"); BigDecimal b = new BigDecimal("0.02"); BigDecimal result = a.add(b);
减法subtract
BigDecimal a = new BigDecimal("0.01"); BigDecimal b = new BigDecimal("0.02"); BigDecimal result = a.subtract(b); //结果为-0.01
乘法multiply
BigDecimal a = new BigDecimal("0.01"); BigDecimal b = new BigDecimal("0.02"); BigDecimal result = a.multiply(b);
除法divide
BigDecimal a = new BigDecimal("0.01"); BigDecimal b = new BigDecimal("0.02"); BigDecimal result = a.divide(b);
当分母为0,报错 java.lang.ArithmeticException: Division by zero
格式化
舍入模式
通过setScale()方法设置保留位数策略
setScale(n,策略) n表示保留几位小数,策略为以下策略,选择保留位数后的处理方式,如常用的四舍五入。setScale(1)表示保留1位小数,不带策略
****************************
ROUND_UP 向上取整
ROUND_DOWN 向下取整
ROUND_HALF_UP 四舍五入 0.25 -》0.3
ROUND_HALF_DOWN 五舍六入
ROUND_FLOOR 负无穷
ROUND_CEILING 正无穷
ROUND_HALF_EVEN 银行家舎入法
ROUND_UNNECESSARY 不需要舎入
常用模式四舍五入
BigDecimal a = new BigDecimal("1"); BigDecimal b = new BigDecimal("0.055"); BigDecimal c =a.multiply(b).setScale(2,BigDecimal.ROUND_HALF_UP)
结果为0.06 保留两位采用=四舍五入模式
去除结尾多余的0
通过.stripTrailingZeros()可去除为结尾多余的0
如0.00 -》0,0.660000000000 -》 0.66
去除科学计数法
如果计算
的结果为整数,则BigDecimal会自动转为科学计数法 如
BigDecimal a = new BigDecimal("6"); BigDecimal b = new BigDecimal("10.00"); BigDecimal c =a.multiply(b).setScale(2,BigDecimal.ROUND_HALF_UP).stripTrailingZeros(); System.out.println(c.toString());
此时结果为6E+1
将toString()改为toPlainString()即可正常输出
结合NumberFormat的一些货币操作
NumberFormat数字格式化类
例子
BigDecimal a = new BigDecimal("0.005"); //输出格式¥+价格 NumberFormat curreny = NumberFormat.getCurrencyInstance(); //输出格式 百分比% NumberFormat percent = NumberFormat.getPercentInstance(); //设置百分比小数点最多保留3位 percent.setMaximumFractionDigits(3); System.out.println(curreny.format(a) + " " + percent.format(a)); //输出 ¥0.00 0.5%
curreny 为货币格式,此时0.001输出为0元,若0.015则或输出0.02(满足保留2位四舍五入)
percent 为百分比格式 percent.setMaximumFractionDigits(n)设置转换为百分比小数点向右移动n-1位置
如,设置n为3,则转换会将小数点向右移动2位置,如0.00005 -》 0.005%、0.5 -》50%
但当小数为6位数后如0.000005,都将转换为0%
NumberFormat和DecimalFormat
注意点:
两者均为线程不安全的类,多线程操作需要注意,可使用ThreadLocal为每个线程生成一个本地实例或者使用synchronized来进行同步。
区别:
NumberFormat和DecimalFormat数字相关格式。
DateFormat和SimpleDateFormat也文字日期相关格式。四者均为Format子类。DecimalFormat为NumberFormat子类,用于处理十进制数字格式
NumberFormat使用
获得实例
Locale.getDefault() 表示使用系统默认地区
NumberFormat integerNumber = NumberFormat.getIntegerInstance(Locale.getDefault());
常用实例构造方法
getInstance、getNumberInstance 数字格式
getIntegerInstance整数格式
getCurrencyInstance货币格式
getPercentInstance百分比的格式
更多相关内容 -
accounting:golang的货币和货币格式
2021-04-12 23:21:38会计是用于货币和货币格式设置的库。 (受启发) 快速开始 go get github.com/leekchan/accounting example.go package main import ( "fmt" "math/big" "github.com/shopspring/decimal" "github.... -
使用NPOI导出EXCEL,设置单元格为货币格式时无效.
2015-03-30 16:17:37在使用NPOI导出EXCEL时,设置了单元格格式为货币格式,但是导出来的数据格式还是为通用格式, 求解!!! 格式代码: ICell cell = contentRow.CreateCell(2); //cell.SetCellValue((double)result.... -
vue-currency-input:轻松输入Vue.js的货币格式数字
2021-04-28 00:48:41Vue货币输入插件可轻松输入货币格式的数字。 它提供了一个独立的组件( <currency> )和一个自定义Vue指令( v-currency ),用于使用货币格式功能来装饰现有的输入组件。 特征 和零依赖关系 键入时格式化 基于语言... -
Excel2021中设置货币数字格式.docx
2021-09-26 22:47:02Excel2021中设置货币数字格式.docx -
rjCurrencyMask:用于将输入字段屏蔽为货币格式的 AngularJs 模块
2021-07-10 21:46:16一个 AngularJs 模块,用于将输入字段屏蔽为货币格式。 您应该能够输入输入,它始终将字符串格式化为货币格式。 该模块使用 AngularJs $locale 服务来确保它适用于所有货币。 ##演示 初始值设置为负数并采用... -
java格式化数值成货币格式示例
2021-03-09 23:43:39java格式化数值成货币格式示例格式化一个数值,比如123456789.123,希望显示成"$123,456,789.123".要完成需求,可以用java.text.NumberFormat类来进行格式化NumberFormat类提供了对数值格式的封装。在JDK中,一般使用...java格式化数值成货币格式示例
格式化一个数值,比如123456789.123,希望显示成"$123,456,789.123".要完成需求,可以用java.text.NumberFormat类来进行格式化
NumberFormat类提供了对数值格式的封装。在JDK中,一般使用NumberFormt的子类----java.text.DecimalFormat完成这个功能。该类最常见的构造函数为:
public DecimalFormat(String pattern)
其中,参数pattern表示传入的格式字符串
代码:
复制代码 代码如下:
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class numberFormat
{
public static void main(String[] args)
{
NumberFormat nf = new DecimalFormat("$,###.##");
String testStr = nf.format(123456789.123);
System.out.println(testStr);
}
}
DecimalFormat特点:
接受相应的格式字符串,将数值中的各个部分格式化显示。#表示阿拉伯数字
在格式字符串中,除了具有代表意义的部分之外,其他部分如$都原样出现
时间: 2014-04-11
数字可以标志货币.百分比.积分和电话号码等,就货币而言,在不同的国家会以不同的格式来定义,本实例将接收用户输入的数字,然后在控制台中输出其货币格式,其中使用了不同国家的货币格式. 思路如下:使用NumberFormat类的getCurrencyInstance()方法,通过不同的参数创建不同的对象,对该对象使用format()方法,方法参数即为用户输入的数字. 代码如下: 复制代码 代码如下: import java.text.NumberFormat;import java.util.Loca
目前整理出来三种形式: 可根据实际需要选择使用 String userNameUrl; int beginIndex = 0; int endIndex = 0; userNameUrl = "454512@hongri@4944115455d9591b274648a06303d910de"; /** * 方法一: */ beginIndex = userNameUrl.indexOf("@")+1; endIndex = userNameUrl.lastIndex
package file; import java.io.File; /** * 输出某个文件夹下所有某个格式的文件 * @author hasee * */ public class Demo2 { public static void main(String[] args) { getTxtName("d:/a",".jpg"); } public static void getTxtName(String path,String suffix) { //判断文
使用java文件过滤器输出制定格式文件路径的实例代码如下所示: 一.使用输出路径判断过滤 import java.io.File; public class demo_file04 { public static void main(String[] args) { fileall(new File("D:\\coding")); } private static void fileall(File f1) { // System.out.println(f1); //判断文件是否是目
上代码: 环境:Python3 import random,string s=string.ascii_letters+string.digits print(s) n={''.join(random.choices(s,k=8)) for I in range(60000)} print(len(n)) with open('a.csv','w') as f: for i in n: f.write(i+'\n') 运行代码,生成a.csv文件并保存. n的类型为set集合类型,实现自动去重.
一.基本数据类型 java的数据类型可以分为两大类:基本类型和复合类型. 基本类型:整型(int,short,long,byte).浮点型(float,double).布尔型(boolean).和字符型(char) 复合类型:数组,类,接口 1.整型 各种整型数据所占空间及数的范围 数据类型 所占内存空间/位 数的范围 byte 8 -128~127 short 16 -32768~32767 int 32 -2^31~2^31-1 long 64 -2^63~2^63-1 整型以补码的形式存放
java 数值类型分秒时间格式化的实例代码 java 实例代码: import java.util.concurrent.TimeUnit; public class DateUtils { private static final String[] UNIT_DESC = new String[]{"天", "小时", "分钟", "秒"}; /** * 格式化持续时间
* 将持续时间,格式化为 xx天在没介绍正文之前,先给大家介绍下websocket的背景和原理: 背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况,HTML5定义了WebSocket协议,能更
第一步:找别人提供的接口,比如在这里我选择的是聚合数据提供的接口 第二步:要申请相应的AppKey方可使用,此参数会作为接口的参数调用. 第三步:调用别人提供的接口方法 代码如下: package juheapi.nba; /** * Created by Administrator on 2017/11/19/019. */ import net.sf.json.JSONObject; import java.io.*; import java.net.HttpURLConnection; i
编程中经常有用到MD5加密的情况,Java语言并没有像PHP一样提供原生的MD5加密字符串的函数,需要MD5加密的时候,往往需要自己写. 代码如下: import java.security.MessageDigest; public class MD5 { //公盐 private static final String PUBLIC_SALT = "demo" ; //十六进制下数字到字符的映射数组 private final static String[] hexDigits =
-
Java POI 生成Excel时显示货币格式
2010-12-21 15:01:17Java POI 生成Excel时显示货币格式 -
java excel设置单元格格式为会计专用,货币单位HKD
2021-03-22 15:31:54HSSFCellStyle currencyDecimalStyle = wb.createCellStyle(); HSSFDataFormat format = wb.createDataFormat(); currencyDecimalStyle.setDataFormat(format.getFormat("_(\"HKD\"* #,##0.00_);...HSSFCellStyle currencyDecimalStyle = wb.createCellStyle(); HSSFDataFormat format = wb.createDataFormat(); currencyDecimalStyle.setDataFormat(format.getFormat("_(\"HKD\"* #,##0.00_);_(\"HKD\"* (#,##0.00);_(\"HKD\"* \"-\"??_);_(@_)")); currencyDecimalStyle.setFont(bodyFont); currencyDecimalStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); writeAmountData(row, (short) 3, totalAmountByPayitemKey, currencyDecimalStyle); public void writeAmountData(HSSFRow row, short cellnum, Object value, HSSFCellStyle cellStyle) { Double amount = new Double(value.toString()); double amountDouble = amount.doubleValue(); if (amountDouble < 0) { amountDouble = amountDouble * -1; } HSSFCell cell = row.createCell(cellnum); cell.setCellValue(amountDouble); cell.setCellStyle(cellStyle); cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); }
下载excel效果图:
-
cryptoformat:Javascript库可格式化和显示加密货币和货币
2021-05-02 20:30:13cryptoformat还通过将工作推迟到浏览器的来尝试处理不同的语言环境和货币格式。 如果Intl.NumberFormat不是由浏览器支持的, cryptoformat提供货币显示一个原始回退。 安装 npm i @coingecko/cryptoformat 用法 ... -
Excel15:单元格数字格式设置:货币会计、时间和日期.wmv
2020-02-13 11:15:16可以帮助用户制作各种复杂的表格文档,进行繁琐的数据计算,并能对输入的数据进行各种复杂统计运算后显示为可视性极佳的表格,同时它还能形象地将大量枯燥无味的数据变为多种漂亮的彩色商业图表显示出来,极大地增强... -
num2cash:将数字转换为货币数组-matlab开发
2021-05-29 14:24:03如果设置为 TRUE 那么两位小数将显示所有值的 % 位置,包括% 整数值。 默认为真。 % % - 'showParens' : 许多会计方法使用括号来表示% 负货币数量。 这个布尔标志% 决定是否用括号来表示% 负值(例如负 $13 显示为... -
纯js实用格式化货币插件
2019-12-11 21:51:06currencyFormatter.js是一款简单实用的纯js格式化货币插件。该插件包含155种不同国家的货币,以及715种不同语言的本地化设置。它还能处理某些不采用的货币,功能非常强大。 -
jquery-quickMoneyEdit:jQuery输入框货币格式
2021-05-22 09:21:12输入框货币格式 用法示例 <input type="text" id="price" name="price" value="1234.56"> $('#price').quickMoneyEdit(); 获取/设置 //Set $('#price').val('1234.56'); $('#price').val('$1,234.56'); //... -
Laravel的货币格式和转换包-PHP开发
2021-05-27 08:15:44为什么不使用Laravel的货币格式和转换包。 该软件包旨在为Laravel项目提供一种简便而功能强大的格式来格式化和转换货币值的工具。 为什么不使用moneyphp包? 因为moneyphp使用intl扩展名进行数字格式设置。 默认情况... -
格式化Excel单元格(货币)
2021-04-18 02:33:13我有excel测试应用程序,将货币格式化为2位小数,逗号为千位分隔符 . 下面是在Excel文件上写入数据的控制台应用程序 .确保您引用了Microsoft.Office.Interop.Excel dllusing System.Collections.Generic;using ...这个对我有用 . 我有excel测试应用程序,将货币格式化为2位小数,逗号为千位分隔符 . 下面是在Excel文件上写入数据的控制台应用程序 .
确保您引用了Microsoft.Office.Interop.Excel dll
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var bankAccounts = new List {
new Account { ID = 345678, Balance = 541.27},
new Account {ID = 1230221,Balance = -1237.44},
new Account {ID = 346777,Balance = 3532574},
new Account {ID = 235788,Balance = 1500.033333}
};
DisplayInExcel(bankAccounts);
}
static void DisplayInExcel(IEnumerable accounts)
{
var excelApp = new Excel.Application { Visible = true };
excelApp.Workbooks.Add();
Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
workSheet.Cells[1, "A"] = "ID Number";
workSheet.Cells[1, "B"] = "Current Balance";
var row = 1;
foreach (var acct in accounts)
{
row++;
workSheet.Cells[row, "A"] = acct.ID;
workSheet.Cells[row, "B"] = acct.Balance;
}
workSheet.Range["B2", "B" + row].NumberFormat = "#,###.00 €";
workSheet.Columns[1].AutoFit();
workSheet.Columns[2].AutoFit();
}
}
public class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}
}
输出
-
laravel-money:Laravel的货币格式和转换包
2021-05-02 06:57:23Laravel的货币格式和转换包 该软件包旨在为Laravel项目提供一种简便而功能强大的格式来格式化和转换货币值的工具。 为什么不使用moneyphp包? 因为moneyphp使用intl扩展名进行数字格式设置。 默认情况下, intl... -
HTML货币格式设置:使用模拟购买的烹饪设备,展示将货币格式和计算应用于订单总额,以及通过信用卡购买进行...
2021-02-21 19:50:39HTML货币格式设置:使用模拟购买的烹饪设备,展示将货币格式和计算应用于订单总额,以及通过信用卡购买进行表格验证 -
js货币格式化
2018-10-29 14:53:41我们都知道当显示价格时都会有一个格式比如:¥666,66.00或者是 $666,66.00 在网上可以搜到好多种方法,我这里就做下笔记,以免以后用到,下面附上代码: function formatMoney (number, places, symbol, thousand... -
Python-pythoncurrencies显示货币格式以及它的数值
2019-08-11 08:35:24python-currencies:显示货币格式以及它的数值 -
POI Excel 单元格格式设置为数值型却成了货币型
2017-05-09 06:54:08XSSFDataFormat format = wb.createDataFormat...如果getFormat()里参数为“0”或者“0.00”,均显示自定义格式,不显示数值类型。 采用上面的代码则总是显示货币类型。网上查了很多资料都没有解决。不知道是什么问题。 -
POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写
2019-01-19 13:18:12第一种:日期格式 cell.setCellValue(new Date(2008,5,5)); //set date format HSSFCellStyle cellStyle = demoWorkBook.createCellStyle(); HSSFDataFormat format= demoW... -
SAP Smartforms 货币和数量字段设置参考及格式
2021-04-22 08:36:09在开发SAP Smartforms 时,会遇到 设置打印的货币字段或数量字段在打印预览时无法显示报错,及数量字段在打印预览时偏下方显示的格式问题,下面将给大家带来解决方法。 1.在打印程序外创建含有行项目QUAN 数量字段... -
纯js实用格式化货币插件特效代码
2021-03-20 01:33:23currencyFormatter.js是一款简单实用的纯js格式化货币插件。该插件包含155种不同国家的货币,以及715种不同语言的本地化设置。它还能处理某些不采用的货币,功能非常强大。 -
vue-currency-input-轻松输入Vue.js的货币格式数字。-Vue.js开发
2021-05-27 21:37:23Vue货币输入Vue货币输入插件可轻松输入货币格式的数字。...具有微小的捆绑包大小和零依赖关系键入时的格式基于Intl.NumberFormat的区域设置依赖于ISO的货币格式(免干扰)(将格式隐藏在焦点上以便于输入) -
货币根据货币符号匹配格式_货币符号的条件格式
2020-08-07 22:58:44货币根据货币符号匹配格式 货币符号的条件格式 (Conditional Formatting for Currency Symbol) If you sell products in several countries, you might want to show the prices in different currencies.... -
SQL 格式化输出 千分位 ¥货币格式
2021-03-03 23:29:18--SQL 格式化货币形式输出 select '¥' + convert(nvarchar,cast('12434545.9462' as money),1); --SQL 格式化千分位输入 + 小数 select reverse(stuff(reverse(convert(varchar,convert(money,123456789),1)),1,3,... -
java 操作 jxl 或者 poi设置货币格式
2015-07-14 07:27:39我想在excel中显示货币格式为CNY 1,234.00,试过很多办法,总是不行 java 操作 jxl设置货币格式不正确 jxl.write.NumberFormat nf = new jxl.write.NumberFormat("[$USD]\\ #,##0.00;[$USD]\\ \\-#,##0.00"); 这种... -
纯js实用格式化货币插件.zip
2019-07-04 21:22:14currencyFormatter.js是一款简单实用的纯js格式化货币插件。该插件包含155种不同国家的货币,以及715种不同语言的本地化设置。它还能处理某些不采用的货币,功能非常强大。 -
money2Text:money2Text 是一个小型 JavaScript 库,可将(整数或十进制)数字转换为货币文本格式
2021-05-29 04:50:03money2Text 是一个小型 JavaScript 库,可将(整数或十进制)数字转换为货币文本格式。 设置 CDN < script src =" https://unpkg.com/money2text " > </ script > NPM npm i money2text 用 在浏览器...