Mac VJE/VJE-γ

素直な文節変換カナ漢字変換ソフト。これもバージョン差分ディスクがこれら以外も多数残ってるな。

ULTRA PAINT

当時Super paintと双璧をなした ULTRA paint。

後のCANVASとの関係性はどうだったっけ。調べればわかるんだろうがちょっと記憶が曖昧。

HP DeskWriter C driver

初期のカラーインクジェットプリンターのドライバーフロッピー。性能の割に結構リーズナブルな価格でヒットした製品だったような。当時の海外製品らしく作りは無骨だったイメージがある。

Lightspeed C

後のTHINK C 今はどうなっているのかは知らない。私が持っていたのはV.2からなのか。当時は確かにコンパイルが早かったCというイメージがある。

Macintosh Plus システム ディスク

ラベルから見てMac Plus本体に添付されていたOSディスクかな。System 2系なのか? 中身は後々調べることにする。OSディスクはアップデートを含めて山ほどあるのでまたいろいろ出てくるだろう。

SuperPaint

これもクラシックな名作ペイントアプリですな。この頃の海外ソフトハウスの名前は独特のノリがあるな。

[Scala] scalaのBigDecimalをjava.text.DecimalFormatで変換するとずれることがある

なんかまだ合点がいってないのだが、細かい桁計算が必要でscalaのBigDecimalを使っていて、それを文字列で打ち出す必要が出た際に、javaのDecimalFormatを使ったら出力文字列が合致しなかった。

val a = "4.95"
val b = "0.000000000000000001"

val bigA = BigDecimal(a)
val bigB = BigDecimal(b)

val bigC = bigA+bigB

bigC.toString() // シンプルにtoStringにしたほうが正しい文字列になった

val fm = new java.text.DecimalFormat("0.###################")

println(fm.format(bigA))
println(fm.format(bigB))
println(fm.format(bigC)) // bigA+bigB に文字列一致しない

val fm2 = new java.text.DecimalFormat("0.0000000000000000000")

println(fm2.format(bigA))
println(fm2.format(bigB))
println(fm2.format(bigC)) // bigA+bigB に文字列一致しない

REPL出力

a: String = 4.95
b: String = 0.000000000000000001

biga: scala.math.BigDecimal = 4.95
bigb: scala.math.BigDecimal = 1E-18

bigc: scala.math.BigDecimal = 4.950000000000000001

res0: String = 4.950000000000000001
// シンプルにtoStringにしたほうが正しい文字列になった

fm: java.text.DecimalFormat = java.text.DecimalFormat@674dc

4.95
0.000000000000000001
4.95  // bigA+bigB に文字列一致しない

fm2: java.text.DecimalFormat = java.text.DecimalFormat@674dc

4.9500000000000000000
0.0000000000000000010
4.9500000000000000000  // bigA+bigB に文字列一致しない

ネットで調べて scalaのBigDecimalとjavaのBigDecimalがちょっと違うよ(MathContext.UNLIMITED設定関係)って話は出てきたが、DecimalFormatが違うって話はよくわからんかった。