`

Java中需要注意的函数

阅读更多
(持续更新中。。。)

1. Calendar -- set() add() roll()

(1)对于某些特别时间的解释可能会有某些歧义,可以用下列方式解决:
23:59 是一天中的最后一分钟,而 00:00 是下一天的第一分钟。因此,1999 年 12 月 31 日的 23:59 < 2000 年 1 月 1 日的 00:00。
尽管从历史上看不够精确,但午夜也属于 "am",,中午属于 "pm",所以在同一天,12:00 am ( 午夜 ) < 12:01 am,12:00 pm ( 中午 ) < 12:01 pm。

----------------------- set() -----------------------
set(f, value) 将日历字段 f 更改为 value。此外,它设置了一个内部成员变量,以指示日历字段 f 已经被更改。尽管日历字段 f 是立即更改的,但是直到下次调用 get()、getTime()、getTimeInMillis()、add() 或 roll() 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set() 不会触发多次不必要的计算。使用 set() 更改日历字段的结果是,其他日历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段之后,get(f) 没必要通过调用 set 方法返回 value 集合。具体细节是通过具体的日历类确定的。
----------------------- add() -----------------------
add() 有两条规则:
Add 规则 1。调用后 f 字段的值减去调用前 f 字段的值等于 delta,以字段 f 中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。
Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段 f 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。

Calendar cal1 = Calendar.getInstance();
cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31
cal1.add(Calendar.MONTH, 1); //2000-9-31 => 2000-10-1, 对吗?
System.out.println(cal1.getTime()); //结果是 2000-9-30

----------------------- roll() -----------------------
Roll() 的规则只有一条:
当被修改的字段超出它可以的范围时,那么比它大的字段不会被修正。

2.DecimalFormat -> NumberFormat -> Format
在Java中,DecimalFormat类为格式化输入输出提供了比C/C++更加强大的面向对象和国际化形式。DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。
DecimalFormat 包含一个 模式 和一组 符号。

模式
DecimalFormat 模式具有下列语法:
模式:
    正数模式
    正数模式;负数模式

正数模式:
    前缀opt 数字后缀opt

负数模式:
    前缀opt 数字后缀opt

前缀:
    除 \uFFFE、\uFFFF 和特殊字符以外的所有 Unicode 字符

后缀:
    除 \uFFFE、\uFFFF 和特殊字符以外的所有 Unicode 字符

数字:
    整数 指数opt
    整数.小数 指数opt

整数:
    最小整数
    #
    # 整数
    # , 整数

最小整数:
    0
    0 最小整数
    0 , 最小整数

小数:
    最小小数opt 可选小数opt

最小小数:
    0 最小小数opt
可选小数:
    # 可选小数opt
指数:
E 最小指数

最小指数:
    0 最小指数opt


舍入:
DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。默认情况下,它使用 RoundingMode.HALF_EVEN。
同步:
DecimalFormat 通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问某个格式,则必须保持外部同步。

符号 位置 国际化? 含义 
数字 阿拉伯数字,如果不存在则显示为 0 
数字 阿拉伯数字,如果不存在则不显示 
数字 小数分隔符或货币小数分隔符 
数字 减号 
数字 分组分隔符 
数字 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。 
子模式边界  分隔正数和负数子模式 
前缀或后缀 乘以 100 并显示为百分数 
\u2030 前缀或后缀 乘以 1000 并显示为千分数 
¤ (\u00A4) 前缀或后缀  货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。 
前缀或后缀  用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号:"# o''clock"。
 
以下是使用了其中部分模式的例子。
package com.java.text;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;

public class NUMBERFORMAT {
	public static void main(String[] args) {
/*		double input = 1234.5678;
//		NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.CHINA);
//		NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.JAPAN);
//		NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.UK);
		NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.US);
		String result = currencyFormat.format(input);
		System.out.println(result);*/
		
/*		double input = 0.567878;
		NumberFormat percentFormat = NumberFormat.getPercentInstance(Locale.CHINA);
		percentFormat.setMinimumFractionDigits(3);
		percentFormat.setMaximumFractionDigits(4);
		String result = percentFormat.format(input);
		System.out.println(result);*/
		
		String pattern = "#,###.0#";//比较常用的数字格式输出. 如果整数部分不够4位,则不显示。小数部分如果不够2位,则不显示。
		DecimalFormat decimalFormat = new DecimalFormat(pattern);
		double input = 123.127;
		String result = decimalFormat.format(input);
		System.out.println(result);
		
		pattern = "0,000.0#";//比较常用的数字格式输出. 如果整数部分不够4位,则显示为0.小数部分如果不够2位,则不显示
		decimalFormat.applyPattern(pattern);
		input = -123.7;
		result = decimalFormat.format(input);
		System.out.println(result);
		
		pattern = "0.000E0#";//若要明确显示两位指数,则改成0.000E00
		decimalFormat.applyPattern(pattern);
		input = 123.78;
		result = decimalFormat.format(input);
		System.out.println(result);
		
		pattern = "#0.##%";//百分数
		decimalFormat.applyPattern(pattern);
		input = 0.2778;
		result = decimalFormat.format(input);
		System.out.println(result);
		
		pattern = "#0.##\u2030";//千分数
		decimalFormat.applyPattern(pattern);
		input = 0.2778;
		result = decimalFormat.format(input);
		System.out.println(result);
		
		pattern = "\u00A4###,###,000.##";//货币
		decimalFormat.applyPattern(pattern);
		input = 277845675;
		result = decimalFormat.format(input);
		System.out.println(result);
		decimalFormat = new DecimalFormat(pattern, new DecimalFormatSymbols(Locale.US));//改变环境
		input = 277845675;
		result = decimalFormat.format(input);
		System.out.println(result);
		
		pattern = "###.00 m/s";//前缀或者后缀
		decimalFormat.applyPattern(pattern);
		input = 75;
		result = decimalFormat.format(input);
		System.out.println(result);
		

		pattern = "'###'###.00'###'";//特殊的前缀或者后缀(1特殊字符 2单引号本身)
		decimalFormat.applyPattern(pattern);
		input = 75;
		result = decimalFormat.format(input);
		System.out.println(result);
		
		pattern = "00 o''clock";//特殊的前缀或者后缀(1特殊字符 2单引号本身)
		decimalFormat.applyPattern(pattern);
		input = 15;
		result = decimalFormat.format(input);
		System.out.println(result);
	}
}

结果:
123.13
-0,123.7
1.2378E2
27.78%
277.8‰
¥277,845,675
$277,845,675
75.00 m/s
###75.00###
15 o'clock

3.
4.
5.
6.
7.
8.
9.
10.
分享到:
评论

相关推荐

    java中时间操作函数

    Java 中时间操作函数 Java 中对于时间操作的一些函数,应该在实际项目中经常会用到。下面将对其中的一些函数进行详细的介绍。 计算某一月份的最大天数 在 Java 中,可以使用 `Calendar` 对象来计算某一月份的最大...

    java调用C语言编写的so库中的函数,java调用C语言编写的dll库中的函数

    在Java中调用SO库的函数,需要以下步骤: 1. **创建JNI头文件**:使用`javah`工具,根据Java中的本地方法声明生成对应的C/C++头文件,其中包含了JNI函数原型。 2. **编写本地代码**:根据生成的头文件,使用C/C++...

    java调用oracle存储过程或者函数

    1. 参数类型匹配:确保Java中的参数类型与Oracle存储过程或函数中的参数类型一致,否则可能导致转换异常。 2. 注意游标处理:有些存储过程可能返回游标,需要特别处理。 3. 事务管理:根据业务需求,可能需要手动...

    java编写的简单函数计算器

    在Java编程语言中,开发一个简单的函数计算器是一个基础但实用的练习,它可以加深对编程概念的理解,特别是关于数学运算和函数的应用。这个计算器主要是为了执行基本的数学函数,例如计算一个数的平方或立方。接下来...

    java实现eval函数

    在Java编程语言中,`eval`函数通常与JavaScript关联,因为JavaScript有一个内置的`eval`函数,它能够解析并执行一个字符串作为JavaScript代码。然而,Java本身并不直接提供类似的功能。`eval`函数在Java中并不是标准...

    java经典小程序-函数小程序

    在函数中,可能会遇到运行时错误,Java通过异常处理机制来捕获并处理这些错误。`try-catch-finally`块是处理异常的关键结构。 7. **访问修饰符**: 除了`public`,还有`private`, `protected`和默认(无修饰符)...

    java泛型类和函数

    ### Java泛型类和函数详解 #### 泛型概述 在Java中,泛型是一种允许开发者在类、接口和方法中使用类型参数的功能。通过使用泛型,可以在编写代码时指定一个或多个类型参数,从而使得编写的代码更加灵活且重用性更高...

    java日期类函数方法整理

    根据给定的文件信息,以下是对Java日期类函数方法的详细整理与解释: ### Java日期类函数方法概览 在Java中,处理日期和时间主要依赖于`java.util.Date`、`java.text.SimpleDateFormat`、`java.sql.Date`、`java....

    java函数讲解

    在Java中,函数重载是一种非常有用的功能,允许我们在同一个类中定义多个同名函数,但要求这些函数的参数列表不同(包括参数的数量、顺序或类型)。这种机制使得程序设计更加灵活。 - **重载的概念**:在一个类中...

    java中随机函数的使用.doc

    在使用 Java 中随机函数时,需要注意以下几点: 1. 随机种子:在使用 java.util.Random 类时,需要注意随机种子的设置,否则可能会出现重复的随机数。 2. 随机数分布:不同的随机函数可能会生成不同的随机数分布,...

    01-Java基础-函数(启发式定义

    8. **异常处理**:函数中可能会涉及到异常的抛出和捕获,这是Java编程中重要的错误处理机制。 9. **函数的最佳实践**:可能还涵盖了如何编写清晰、高效的函数,比如避免大函数,保持单一职责,以及适当使用注释等。...

    lesson03-04 Java类基础知识--自定义函数.ppt

    但是,需要注意的是,递归函数调用,即函数在其定义中调用自己的情况,必须确保存在一个明确的终止条件,否则会导致无限循环,如 `FactorialTest.java` 示例中可能涉及到的。 函数重载(Overload)是Java中一个重要...

    java中文乱码处理函数

    本文将详细介绍一个Java函数,用于解决Java应用程序中的中文乱码问题。 #### 二、乱码产生的原因 在探讨解决方案之前,我们先来了解一下中文乱码产生的原因。中文字符属于多字节字符集,常见的有GBK、GB2312、UTF-...

    java语言方法调用C语言函数

    本文将深入探讨如何在Java中通过JNI调用C语言函数,为初学者提供一个详尽的实例教程。 1. **Java Native Interface (JNI)** JNI是Java平台标准的一部分,它为Java程序员提供了一个接口,可以编写本地方法(即C或...

    JAVA如何调用C函数.pdf

    通过JNI,Java程序能够调用本地库中的函数,同时也能使本地代码调用Java方法。这种双向的互操作性极大扩展了Java的使用范围,使得开发者能够在保持Java代码的优势的同时,充分利用底层语言的强大功能。 #### 实现...

    java读取文件内容的函数

    2. **异常处理**:虽然当前函数处理了`IOException`,但在实际应用中可能还需要考虑更全面的异常情况,如权限问题等。 3. **性能考量**:对于大文件,使用`StringBuilder`代替`StringBuffer`在单线程环境中可以提高...

    java代替sql limit函数

    在Java编程中,有时我们需要对数据库查询结果进行分页显示,传统的MySQL数据库中,我们通常会使用`LIMIT`和`OFFSET`子句来实现这一功能。然而,当数据量庞大时,这种做法可能会导致性能问题,因为`OFFSET`在处理大量...

    unity 调用 android java函数

    在Android Studio中,你需要创建一个新的Java类,并在其中定义Unity需要调用的函数。例如: ```java public class UnityPlayerActivity extends Activity { static { System.loadLibrary("unity-android-jnifuncs...

    Java 函数速查 HTML版

    Java函数速查HTML版是一个非常实用的资源,它包含了Java编程语言中大量核心函数和类的详细信息,便于开发者在编程过程中快速查找和参考。这个HTML版本尤其方便,因为可以在网页浏览器中直接浏览,无需安装额外软件,...

    全排列的Hash函数(JAVA)

    - 在`processCurrentPermutation`函数中,可以使用自定义的Hash函数将当前排列转换为一个键,并存入哈希表(如HashMap)。 - 如果发现哈希表中已有相同的键,则说明已生成过该排列,可以直接跳过;否则,将该排列...

Global site tag (gtag.js) - Google Analytics