web-dev-qa-db-ja.com

Velocityテンプレートで数値をフォーマットする方法は?

ベロシティテンプレートにJavaオブジェクトが表示されます。オブジェクトには、小数点以下2桁にフォーマットしてテンプレートに表示したいdouble値があります。

オブジェクトを取得しているクラスは次のようなものです

Class Price
{
double value;
String currency;
}

私の速度テンプレートでは、このような値を取得しています

$price.value

表示する前に小数点以下2桁にフォーマットする必要があります。

変換したい

23.59004から23.59

35.7から35.70

3.0から3.00

9から9.00

速度テンプレートでどのように実行できるか教えてください。これをたくさん検索したところ、ベロシティツールを使用できることがわかりましたが、それに関連する例はありませんか?テンプレートでベロシティツールを使用できますか?

14
Rajesh Pantula

VelocityツールはVelocityテンプレートでの使用が想定されています。基本的に、これらはテンプレートで使用可能な変数に追加されるオブジェクトであり、$numberTool.format("#0.00", $val)などを使用できます。利用可能なツールがどれもニーズに合わない場合は、POJOを作成してテンプレートに追加するだけです。

これを機能させるには、次のmaven依存関係も追加する必要があります。

<dependency>
    <groupId>org.Apache.velocity</groupId>
    <artifactId>velocity-tools</artifactId>
    <version>2.0</version>
</dependency>

次のコードを書きます:

context.put("numberTool", new NumberTool());
25
#set($String = "abc")
$String.format("%.2f", $val)

$valこの場合、DoubleまたはFloatである必要があります...

21
dedek

VelocityToolsプロジェクトのMathToolを使用します。

$math.roundTo(2, $val)
2
abahet

formatCurrency($ value)。これは良いJava数値を通貨形式にフォーマットする速度コードです。

1
user2157025

$numberTool.formatを使用する以外に、より良い方法は、数値だけではないMessageFormatベースのツールクラスの1つを使用することです。たとえば、Struts固有のMessageToolを使用しますが、代わりにResourceToolのような類似のものを使用できます。

resources.properties
some.key=The price is currently {0,number,$#.##}

template.vm
<p>
  $msg.get('some.key', 'resources', [$price])
</p>

このようにして、それ自体だけでなく、状況に応じた数を取得します。英語以外の言語では、数字はテキストの左側、中央、またはその他に来る方が適切かもしれません。これにより、単純に数値を単独でフォーマットするよりもはるかに柔軟になります。

0

$ numberTool.format( "#0.00"、$ val)

0
Rafael Sanches