【问题描述】在将应用从 Oracle 迁移到 YashanDB 后,开发人员发现相同 SQL:SELECT 0.00 FROM dual;在 Oracle 下返回 Float 类型,而在 YashanDB...【触发条件】查询中包含常量列 0.00;使用 Java + JDBC 驱动获取 ResultSetMetaData;依赖 precision 和 scale 判断返回值类型时,产生了误判。...Oracle 行为(JDBC)Oracle 所有数值类型本质上都是 NUMBER 类型;若未明确指定精度/刻度,JDBC 返回:precision = 0scale = -127Java 应用判断 scale...YashanDB 行为同样的常量 0.00.YashanDB JDBC 返回的是整型;实际返回结果 precision = 0、scale = -127.但底层处理逻辑不同,映射规则可能走到了 Integer...方法二:SQL 显式定义类型(推荐)在 SQL 中强制指明常量类型,避免数据库自行推断:SELECT CAST(0.00 AS NUMBER(10. 2)) FROM dual;【迁移提醒】Oracle
介绍 DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。 在做数字格式化时,DecimalFormat还是比较方便的。...%: 乘以 100 和作为百分比显示 等~~ 描述的不好,直接看代码吧 用法 (0)截取整数部分 DecimalFormat df = new DecimalFormat("0"); df.setRoundingMode...、小数后两位(小数部分为0时显示.00) DecimalFormat df = new DecimalFormat(",###.00"); log(df.format(123123123.123));/...log(df.format(0.123));//结果:12.3% ---- (-#)以负数显示 DecimalFormat df = new DecimalFormat("-#"); log(df.format...);//结果:123 千克 log(df.format(0.123));//结果:0 千克 ---- 四舍五入,保留小数点后一位 DecimalFormat df = new DecimalFormat
System.out.println(format("#.00", new BigDecimal("0012.00")));// 12.00 System.out.println(format("0.00
Java 提供DecimalFormat类,帮你用最快的速度将数字格式化为你需要的样子。下面是一个例子: DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。...("0").format(pi));//3 //取一位整数和两位小数 System.out.println(new DecimalFormat("0.00").format(pi));/...("0.00").format(b)); //11.00 //保留两位小数,四射五入,但当末尾位0时,自动忽略 System.out.println(new DecimalFormat...小数点的位置 四舍五入 int s = Integer.parseInt(df.format(d)); System.out.println("math的返回之是"+Math.round...(d));//四舍五入 return s; // return (int) d;//强制返回int } }
作者:RaphetS 第一种方法 使用DecimalFormat类 举个例子,假如我们需要保留两位小数,我们可以这样写 DecimalFormat df = new DecimalFormat("0.00..."); 测试如下: double d = 0.200;DecimalFormat df = new DecimalFormat("0.00");System.out.println(df.format(...d)); 输出结果为: 0.20 若double d=0.000;输出结果为0.00; 若double d=0;输出结果为0.00; 若double d=41.2345;输出结果为41.23; 经测试...同理若是保留一位小数DecimalFormat df = new DecimalFormat(“0.0”);其他以此类推 若是这种写法DecimalFormat df = new DecimalFormat...(“0.00”),不管传入的任何值,均保留两位小数 还有一种写法是这样: double d = 41.123;DecimalFormat df = new DecimalFormat("#.##");System.out.println
// b.setScale(2, BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数 方法3: float scale = 34.236323; DecimalFormat...fnum = new DecimalFormat( “##0.00 “); String dd=fnum.format(scale); System.out.println(dd)...方式5: 此外如果使用struts标签做输出的话,有个format属性,设置为format=”0.00″就是保留两位小数 例如: 方法6: public static void main(String[...通过DecimalFormat.format返回String的 DecimalFormat df = new DecimalFormat(“#.##”); System.out.println(“通过DecimalFormat.format...StringFormat: ” String.format(“%.2f”, d)); } // 通过Math取整后做除法: 62.31 // 通过BigDecimal.setScale获得: 62.31 // 通过DecimalFormat.format
如果当前对象等于参数对象,返回0。 如果当前对象小于参数对象,返回负整数。...对象,指定格式 DecimalFormat formatter =new DecimalFormat("#,##0.00"); // 格式化BigDecimal...常见格式化模式 2.1 保留两位小数,不使用千分位分隔符 格式模式:0.00 BigDecimal number =new BigDecimal("1234567.8912"); DecimalFormat...("1234567.8912"); DecimalFormat formatter = new DecimalFormat("#,##0.00"); String formattedNumber = formatter.format...("1234567.1012"); DecimalFormat formatter = new DecimalFormat("#,##0.00"); String formattedNumber = formatter.format
ObjectUtils; import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.text.DecimalFormat...; public class MoneyUtils { /** * 将钱格式化 */ private final static DecimalFormat DECIMAL_FORMAT...= new DecimalFormat("###,##0.00"); private static final String MONEY_FORMAT = ",##0.00"; public...df = new DecimalFormat(MONEY_FORMAT); return df.format(money); } public static String...formatToMoney(String s){ if (s == null || s.equals("")){ return "0.00";
df = new DecimalFormat("#0.00"); String str1 = df.format(bd); //输出结果为123.12 System.out.println...= new DecimalFormat("#0.00");// //输出结果为123.12// System.out.println(df.format(bd));...df1 = new DecimalFormat(dp1); DecimalFormat df2 = new DecimalFormat(dp2); DecimalFormat...df3 = new DecimalFormat(dp3); DecimalFormat df4 = new DecimalFormat(dp4); //保留两位小数...总结对比打印结果可知第一种00.00在整数位和小数位都满足两位或者以上的时候不受影响,当整数位或小数位少于两位时会自动填充为0第二种#0.00是满足所有条件的保留两位小数规则,当小数位不满两位会自动填充为
问题现象客户预期常量列"0.00"应该映射到 java 里的浮点类型,结果却是跑到整型。...1、应用的 sql2、应用的 java 代码3、执行结果问题的风险及影响客户查询信息失败问题影响的版本23.2.4.25问题发生原因oracle 与 yashanDB 的 jdbc 返回常量列"0.00...如果常量列是整型或浮点型 oracle 的 jdbc 返回都是 number 类型,且是未定义的。
doubleValue() 将BigDecimal对象中的值以双精度数返回。 floatValue() 将BigDecimal对象中的值以单精度数返回。...longValue() 将BigDecimal对象中的值以长整数返回。 intValue() 将BigDecimal对象中的值以整数返回。...df1 = new DecimalFormat(“0.00”); String str = df1.format(num); System.out.println(str);...//13.15 //方式二 // #.00 表示两位小数 #.0000四位小数 DecimalFormat df2 =new DecimalFormat(“#.00”);...style = “0.00\u2030”; //在构造函数中设置数字格式 DecimalFormat df1 = new DecimalFormat(style); //df.applyPattern
方法二:使用DecimalFormat类(四舍五入) 1.使用 0.00 表示保留两位小数, 不足两位会使用0补齐 DecimalFormat df = new DecimalFormat("0.00...System.out.println(df.format(z)); 结果如下: 5.11 5.12 5.10 2.使用 #.## 也是表示保留两位小数,但是不足两位就不会补齐啦 DecimalFormat...df2 = new DecimalFormat("#.##"); System.out.println(df2.format(x)); System.out.println(df2.format
doubleValue();如需保留3位 Double result = b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue(); 2.第二种方法 DecimalFormat...df = new DecimalFormat("0.00"); Double result = df.format((float)5/6);如需保留3位 DecimalFormat df = new...DecimalFormat("0.000"); Double result = df.format((float)5/6); 3.第三种 String percent = new BigDecimal..."0.00%" : a.multiply(new BigDecimal(100)).divide(b,2,BigDecimal.ROUND_HALF_UP
eg: 1:new DecimalFormat("00.000").format(pi) //结果:03.142 2:new DecimalFormat("##.###").format...new DecimalFormat("00.00").format(3.14) //结果:03.14 new DecimalFormat("0.000").format(3.14) //结果...new DecimalFormat("0.000").format(13.146) //结果:13.146 new DecimalFormat("00.00").format(13.146)...//结果:13.15 new DecimalFormat("0.00").format(13.146) //结果:13.15 #: 比实际数字的位数多,不变。...new DecimalFormat("##.##").format(3.14) //结果:3.14 new DecimalFormat("#.###").format(3.14) //结果
import java.text.DecimalFormat; import java.util.Scanner; public class Main{ public static void main...(String[] args){ Scanner sc = new Scanner(System.in); DecimalFormat df = new DecimalFormat("0.00"...四棱锥体积(中间有一个空格作为间隔,数值保留两位小数) Sample Input 1 2 3 0 2 3 -1 2 3 3 4 5 Sample Output 22.00 6.00 11.25 2.00 0.00...0.00 0.00 0.00 0.00 0.00 0.00 0.00 94.00 60.00 49.04 20.00
doubleValue(); 如需保留3位 Double result = b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue(); 2.第二种方法 DecimalFormat...df = new DecimalFormat("0.00"); Double result = df.format((float)5/6); 如需保留3位 DecimalFormat df...= new DecimalFormat("0.000"); Double result = df.format((float)5/6); 3.第三种 String percent = new BigDecimal..."0.00%" : a.multiply(new BigDecimal(100)).divide(b,2,BigDecimal.ROUND_HALF_UP
/** * 使用java.text.DecimalFormat实现 * * @param x * @param y * @return */...public static String getPercent(int x, int y) { if (x == 0) return "0.00%"; double...d1 = x * 1.0; double d2 = y * 1.0; // 设置保留几位小数, “.”后面几个零就保留几位小数,这里设置保留两位小数 DecimalFormat...decimalFormat = new DecimalFormat("##.00%"); return decimalFormat.format(d1 / d2); } /*
希望可以帮助到需要的小伙伴/*** 格式化数字为千分位显示;* @param* @return*/public static String fmtMicrometer(String text){ DecimalFormat...("###,##0."); }else if(text.length() - text.indexOf(".")-1 == 1) { df = new DecimalFormat...("###,##0.00"); }else if(text.length() - text.indexOf(".")-1 == 3) { df = new DecimalFormat...("###,##0.00000"); } }else { df = new DecimalFormat("###,##0"); } double number =...#FORMAT FORMAT} locale.* This is a convenient way to obtain a* DecimalFormat when internationalization
大家好,又见面了,我是你们的朋友全栈君 整理…… //1> 0.00 或者#.00 格式:小数点后两位,不足用0补足。...// 补充:当格式化定义为#.00,对数字0格式化时结果为:.00,此时应使用0.00格式化 DecimalFormat df1 = new DecimalFormat("#.00"); System.out.println...df1.format(2.2));// 2.20 System.out.println(df1.format(2.246));// 2.25 //2> #.## 格式:小数点后两位,多余的0不显示 DecimalFormat...df2 = new DecimalFormat("#.##"); System.out.println(df2.format(2.2));// 2.2 System.out.println(df2.format