C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 5単位での切り上げ、切り捨て


(過去ログ 171 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■98631 / inTopicNo.1)  5単位での切り上げ、切り捨て
  
□投稿者/ ゆい (31回)-(2021/12/08(Wed) 17:24:29)

分類:[VB.NET/VB2005 以降] 

VB2017で単精度浮動小数点型 (Single)の数値です。
これを例えば金額とすれば、0円、5円、10円・・と言ったように
5円単位での「切り上げ・切り捨て」する方法を教えてください。

引用返信 編集キー/
■98632 / inTopicNo.2)  Re[1]: 5単位での切り上げ、切り捨て
□投稿者/ ビール呑み (3回)-(2021/12/08(Wed) 17:54:09)
Math.FloorやMath.ceilingはご存じかと思います。

考え方としては、単位とする値で「割って」「関数にかけて」「掛けて」みてください。

引用返信 編集キー/
■98633 / inTopicNo.3)  Re[1]: 5単位での切り上げ、切り捨て
□投稿者/ くま (55回)-(2021/12/08(Wed) 18:20:30)
2021/12/08(Wed) 18:32:55 編集(投稿者)
5円単位で→2.5円単位でだと思うんだけど...
小数点以下が無いのであれば
どこで切り上げ切り捨てるかは自分で調整してくださいな。

Dim Money As Decimal = 7 '求めたい値
Dim MoneyDec As Decimal = Money / 10D
Dim MoneyInt As Decimal = Math.Truncate(MoneyDec)
Dim MoneyPart As Decimal = MoneyDec - MoneyInt

If MoneyPart >= 0.0D And MoneyPart < 0.25D Then
  MoneyInt += 0.0D
Elseif MoneyPart >= 0.25D And MoneyPart < 0.75D Then
  MoneyInt += 0.5D
Elseif MoneyPart >= 0.75D And MoneyPart < 1.0D Then
  MoneyInt += 1.0D
End If
Money = MoneyInt * 10D

引用返信 編集キー/
■98635 / inTopicNo.4)  Re[1]: 5単位での切り上げ、切り捨て
□投稿者/ KOZ (189回)-(2021/12/08(Wed) 18:58:39)
2021/12/08(Wed) 19:06:28 編集(投稿者)
No98631 (ゆい さん) に返信
> これを例えば金額とすれば、0円、5円、10円・・と言ったように
> 5円単位での「切り上げ・切り捨て」する方法を教えてください。

仕様がはっきりしないですね・・・

Sub Main()

    Console.WriteLine("切り上げ")
    For value As Double = 0 To 11
        Console.WriteLine($"{value} → {Ceiling(value, 5)}")
    Next

    Console.WriteLine("切り捨て")
    For value As Double = 0 To 11
        Console.WriteLine($"{value} → {Truncate(value, 5)}")
    Next

    Console.WriteLine("四捨五入?")
    For value As Double = 1.9 To 3.1 Step 0.1
        Console.WriteLine($"{value} → {Round(value, 5)}")
    Next

    Console.ReadKey()
End Sub

Function Ceiling(ByVal value As Double, ByVal unit As Double) As Double
    Return Math.Sign(value) * Math.Truncate((Math.Abs(value) + unit - unit / 10) / unit) * unit
End Function

Function Truncate(ByVal value As Double, ByVal unit As Double) As Double
    Return Math.Sign(value) * Math.Truncate(Math.Abs(value) / unit) * unit
End Function

Function Round(ByVal value As Double, ByVal unit As Double) As Double
    Return Ceiling(Truncate(value * 2, unit) / 2, unit)
End Function

キャストが面倒なので全部 Double に。(^_^;)

どうも図表モードにするのを忘れてしまう・・・

引用返信 編集キー/
■98636 / inTopicNo.5)  Re[2]: 5単位での切り上げ、切り捨て
□投稿者/ ゆい (32回)-(2021/12/08(Wed) 19:48:23)
No98633 (くま さん) に返信

ありがとうございます。
希望のようになりました。
解決済み
引用返信 編集キー/
■98637 / inTopicNo.6)  Re[2]: 5単位での切り上げ、切り捨て
□投稿者/ ゆい (33回)-(2021/12/08(Wed) 20:17:50)
No98635 (KOZ さん) に返信

またの機会にお願いします。

引用返信 編集キー/
■98638 / inTopicNo.7)  Re[3]: 5単位での切り上げ、切り捨て
□投稿者/ shu (1264回)-(2021/12/09(Thu) 08:29:35)
No98637 (ゆい さん) に返信
> ■No98635 (KOZ さん) に返信
> 
> またの機会にお願いします。
> 
解決したようですが整数の計算であれば演算は整数のものを利用した方がよいです。

        For i = 0 To 50
            Dim sute = (i \ 5) * 5
            Dim age = ((i + 4) \ 5) * 5
            Dim rd23 = ((i + 2) \ 5) * 5
            Debug.WriteLine($"{i}:{sute}:{age}:{rd23}")
        Next

引用返信 編集キー/
■98639 / inTopicNo.8)  Re[4]: 5単位での切り上げ、切り捨て
□投稿者/ KOZ (190回)-(2021/12/09(Thu) 09:18:58)
No98638 (shu さん) に返信
> 解決したようですが整数の計算であれば演算は整数のものを利用した方がよいです。

お題は「VB2017で単精度浮動小数点型 (Single)の数値です。」なのです。

解決済のチェックが外れているのでつけておきます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -